JQuery несколько проверок AJAX для всего сделано? (порядок не важен) - PullRequest
4 голосов
/ 28 января 2010

Есть ли аккуратный способ убедиться, что куча обратных вызовов ajax завершены? Их не нужно выполнять по порядку, мне просто нужны все данные.

Одна идея состоит в том, чтобы все они увеличивали счетчик по завершении и проверяли, равен ли счетчик == countMax, но это выглядит ужасно Кроме того, есть ли проблемы с синхронизацией? (от одновременного чтения / записи до счетчика)

Ответы [ 4 ]

8 голосов
/ 17 апреля 2010

Для этого доступен метод .ajaxStop(), он срабатывает только после завершения последнего из текущих запросов ajax. Вот полное описание:

Всякий раз, когда Ajax-запрос завершается, jQuery проверяет, есть ли другие ожидающие Ajax-запросы. Если ничего не осталось, jQuery вызывает событие ajaxStop. Все обработчики, которые были зарегистрированы с помощью метода .ajaxStop(), выполняются в это время.

Например, если вы хотите просто запустить что-то, документ - это хорошее место для подключения:

$(document).ajaxStop(function() {
  //all requests finished!, do something with all your new fancy data
});

Или вы можете отобразить сообщение, когда это произойдет, например:

$("#ajaxProgressDiv").ajaxStop(function() {
  //display for 2 seconds then fade out
  $(this).text("All done!").delay(2000).fadeOut();
});
1 голос
/ 28 января 2010
var msg= $("<div style='height:100px;width:200px; background:#000;color:#fff; line-height:100px;text-align:center;position:fixed;top:50%;left:50%;z-index:1000;margin-left:-100px; margin-top:-50px'>Ajax done! Click Me!</div>")
.click(function(){
$(msg).fadeOut(1000,function(){
   $(this).remove();
   });
})

$(document).ajaxStop(function(){
  $('body').append(msg);
})

точка прикрепляет событие ajaxStop() к документу для глобальной проверки. Вы можете быть более конкретным, если хотите.

1 голос
/ 28 января 2010

Вы можете взглянуть на плагин queue .

0 голосов
/ 16 сентября 2012

Также $ .active будет содержать текущее количество активных AJAX-запросов, для любого, кто пытается использовать его с JSONP-запросами (как я), вам нужно включить его с помощью:

jQuery.ajaxPrefilter(function( options ) {
    options.global = true;
});

Имейте в виду, что вам потребуется тайм-аут в вашем запросе JSONP для отлова ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...