jQuery теперь определяет когда функция для этой цели.
Принимает любое количество отложенных объектов в качестве аргументов и выполняет функцию, когда все они разрешаются.
Это означает, что если вы хотите инициировать (например) четыре ajax-запроса, а затем выполнить действие, когда они будут выполнены, вы можете сделать что-то вроде этого:
$.when(ajax1(), ajax2(), ajax3(), ajax4()).done(function(a1, a2, a3, a4){
// the code here will be executed when all four ajax requests resolve.
// a1, a2, a3 and a4 are lists of length 3 containing the response text,
// status, and jqXHR object for each of the four ajax calls respectively.
});
function ajax1() {
// NOTE: This function must return the value
// from calling the $.ajax() method.
return $.ajax({
url: "someUrl",
dataType: "json",
data: yourJsonData,
...
});
}
На мой взгляд, это делает длячистый и понятный синтаксис и исключает использование каких-либо глобальных переменных, таких как ajaxStart и ajaxStop, которые могут иметь нежелательные побочные эффекты при разработке вашей страницы.
Если вы заранее не знаете, сколько аргументов ajax нужно ждатьдля (т.е. вы хотите использовать переменное число аргументов), это все еще можно сделать, но это немного сложнее.См. Передача массива отложенных в $ .when () (и, возможно, jQuery. При устранении неполадок с переменным числом аргументов ).
Если вам нужен более глубокий контрольв режимах сбоя сценариев ajax и т. д. вы можете сохранить объект, возвращаемый .when()
- это объект jQuery Promise , охватывающий все исходные запросы ajax.Вы можете вызвать .then()
или .fail()
, чтобы добавить детальные обработчики успеха / неудачи.