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

发布于 2021-02-02 18:09:55

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

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

关注者
0
被浏览
511
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    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参数(即,您想使用可变数量的参数),它仍然可以完成,但是有点棘手。请参阅将Deferreds数组传递给$.when()(以及在使用可变数量的参数进行故障排除时,可能还有jQuery。)。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看