Я просмотрел много похожих вопросов, но предлагаемые решения не работают во всех случаях, как ожидалось. Следующий код работает прекрасно, когда все Ajax звонки успешно сделано, но если какой-либо из Ajax вызовов происходит сбой, то onComplete
сразу же называют:Дождитесь завершения всех вызовов jQuery ajax (сделано или отклонено)
var deferredArray = $('.preload').map(function() {
return $.get(this.href)
});
$.when.apply($, deferredArray).then(onComplete, onComplete);
Так что может быть два случая:
- все отсроченные звонки успешны, затем
onComplete
называется впоследствии - работает нормально; - некорректный отложенный вызов (возвращает HTTP 400 Bad request), то
onComplete
вызывается немедленно, не дожидаясь других отложенных вызовов.
Второй случай представляет мою проблему. Он должен всегда ждать завершения всех вызовов независимо от состояния, прежде чем звонить onComplete
.
Я использую jQuery 1.7.1, поскольку он встроен в фреймворк. Если проблема связана с версией, я могу обновить ее, но я бы предпочел сохранить текущую версию.
Вы смотрели в http://api.jquery.com/ajaxcomplete/? –
@ KrisHollenbeck, но событие ajaxComplete запускается по каждому завершенному запросу Ajax. Мне нужно, чтобы это срабатывало только один раз, когда все мои запросы Ajax завершены. Вот почему я должен использовать 'when'. – lagivan
Извините, я хотел опубликовать ссылку 'ajaxStop()'. Я использовал 'ajaxStop()' для запуска файла после завершения всех событий ajax. Обычно это работает, если мне нужно выполнить какую-то работу с JavaScript, связанную с компоновкой, и обеспечить, чтобы данные были на месте. Но это может не сработать для вашего случая использования. https://api.jquery.com/ajaxStop/ –