2015-05-22 2 views
0

Раньше я использовал $(document).ajaxComplete(function() {});, чтобы проверить, закончилась ли работа на всех вызовах ajax.jQuery ajaxComplete, ajaxSuccess устарел?

Я прочитал jQuery 1.8+, устаревший .ajaxComplete и .ajaxSuccess. Есть ли какие-либо альтернативы, которые я могу проверить, завершила ли страница все вызовы ajax?

ответ

0

Это не рекомендуется, проверить документацию для ajaxComplete()http://api.jquery.com/ajaxcomplete/

По состоянию на JQuery 1.8, метод .ajaxComplete() должен быть прикреплен только к документу.

Все обработчики ajaxComplete вызываются независимо от того, какой запрос Ajax был завершен. Если вы должны различать запросы, используйте параметры, переданные обработчику. Каждый раз, когда выполняется обработчик ajaxComplete, ему передается объект события, объект XMLHttpRequest и объект настроек, который использовался при создании запроса.

И самое главное:

Если $.ajax() или $.ajaxSetup() вызывается с глобальным параметром, установленным в ложь, метод .ajaxComplete() не будет срабатывать.

0

Обратите внимание, что ваше требование немного отличается от функциональности .ajaxComplete(). .ajaxComplete() увольняется всякий раз, когда любой AJAX звонки завершены на странице, а не когда все звонки завершены.

Если вы хотите, чтобы убедиться, что все вызовы будут завершены до вызова обработчика, вы должны будете хранить все ваши запросы AJAX в массив, и убедитесь, что все они в комплекте с помощью $.when.apply($, array), например:

var ajaxCalls = []; 

// Make ajax calls 
var call1 = $.get(...); 
ajaxCalls.push(call1); 

// Rinse and repeat the above pattern 

// Fire function when ALL AJAX calls are completed 
$.when.apply($, ajaxCalls).then(function() { 
    // When ALL ajax calls in the array are successful 
}, function() { 
    // When one or more of the ajax calls have failed 
}); 
Смежные вопросы