小编典典

等到所有 jQuery Ajax 请求都完成?

all

如何让一个函数等到所有 jQuery Ajax 请求都在另一个函数中完成?

简而言之,在执行下一个请求之前,我需要等待所有 Ajax 请求完成。但是怎么做?


阅读 113

收藏
2022-03-02

共1个答案

小编典典

jQuery 现在为此定义了一个when 函数。

它接受任意数量的 Deferred 对象作为参数,并在它们全部解析时执行一个函数。

这意味着,如果您想启动(例如)四个 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 参数(即您想使用可变数量的参数),它仍然可以完成,但有点棘手。

如果您需要更深入地控制 ajax 脚本等的故障模式,您可以保存返回的对象- 它是一个包含所有原始 ajax 查询.when()的 jQuery
Promise对象。您可以调用.then().fail()添加详细的成功/失败处理程序。

2022-03-02