如何等待所有 jQuery Ajax 请求完成

在本教程中,我们将学习如何让函数等待所有 Ajax 请求完成的问题。

jQuery 提供 when() 函数可以解决这个问题,它接受任意数量的 Deferred 对象作为参数,并在所有这些对象都解决时执行一个函数。

例如,当我们发起三个 ajax 请求并在它们完成后执行一个操作时,我们应该这样做:

$.when(ajax1(), ajax2(), ajax3(), ajax4()).done(function (a1, a2, a3, a4) {
   //当所有请求都解决时执行代码。
  //a1, a2, a3 and a4 是包含响应文本的长度为 3 的列表,
  //status and jqXHR object for each four ajax call.
});
function ajax1() {
  //此函数必须通过调用 $.ajax() 方法返回值。
  return $.ajax({
    url: "someUrl",
    dataType: "json",
    data: yourJsonData,
    ...
  });
}

这种语法被认为是干净的,它避免了涉及任何全局变量,例如 ajaxStart 和 ajaxStop。

建议保存 .when() 返回的对象——jQuery Promise 对象,它包含所有原始 ajax 查询,以便更好地控制 ajax 脚本。
我们可以在其上调用 .then() 或者 .fail() 方法来添加成功/失败处理程序。

when() 函数

.when() 函数提供了一种基于零个或者多个 Thenable 对象执行回调函数的方法,主要是在表示异步事件的 Deferred 对象上。
如果没有参数传递给 jQuery.when(),它将返回一个已解决的 Promise。

日期:2020-06-02 22:16:30 来源:oir作者:oir