Вызовите вызов функции JavaScript ожидать, пока предыдущий не будет закончен

Относительно собственного ответа Тодда на этот вопрос ...

У меня только что была эта проблема с PHP, и то же самое решение сработало бы. Однако мне нужна была информация на сессии. Для разработчиков PHP вы можете позвонить session_write_close() , чтобы закрыть и записать ваш сеанс в середине запроса. Это освободит сеанс для других запросов.

12
задан mwilliams 9 October 2009 в 23:50
поделиться

3 ответа

Если эти функции действительно выполняют запрос AJAX, вам лучше оставить их асинхронными. Вы можете сделать синхронный запрос AJAX, но это остановит ответ браузера и приведет к ухудшению взаимодействия с пользователем.

Если то, что вам нужно, если эти запросы AJAX выполняются один за другим, потому что они зависят друг от друга, вам следует изучить ваша функция, чтобы узнать, предоставляет ли она механизм обратного вызова.

makeRequest('food', function()
{
    // called when food request is done
    makeRequest('shopping');
});

Используя jQuery, это выглядит примерно так

$.get("/food", function(food)
{
    // do something with food

    $.get("/shopping", function(shopping)
    {
        // do something with shopping
    });
});
15
ответ дан 2 December 2019 в 19:55
поделиться

Я бы порекомендовал вам просто записывать их асинхронно - например, call makeRequest ('shopping'); из обработчика завершения AJAX первого вызова.

Если вы не хотите писать код асинхронно, см. Javascript Strands

1
ответ дан 2 December 2019 в 19:55
поделиться

Я полагаю, у вас есть метод обратного вызова, который заботится об ответе на запрос? После этого позвольте ему сделать следующий запрос.

Объявите массив для очереди и флаг для отслеживания статуса:

var queue = [], requestRunning = false;

В методе makeRequest:

if (requestRunning) {
   queue.push(requestParameter);
} else {
   requestRunning = true;
   // do the request
}

В методе обратного вызова после позаботимся об ответе:

if (queue.length > 0) {
   var requestParameter = queue.splice(0,1)[0];
   // do the request
} else {
   requestRunning = false;
}
1
ответ дан 2 December 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: