多次AJAX调用后执行代码

时间:2015-07-08 13:38:07

标签: javascript jquery ajax promise

在将其标记为重复之前,我已经查看了有关stackoverflow的几篇文章,但他们似乎没有回答我的问题。

我正在构建一个带有api的插件,该API使用http请求进行调用。我有一个主循环,它执行多次,其中有多个不同的AJAX请求。所有请求完成后,我需要能够执行代码。

我遇到的主要问题是,在到达$.when函数时,持有所有promise对象的数组为空或大部分为空,导致代码在所有内容完成之前触发。

以下是代码的基本简化概述:

var xhrs = [];
var xhr = null;

$.each(array, function(index, el) {
    // Step 1
    xhr = ajaxCall.success(function() {
        xhr = ajaxCall2();
        xhrs.push(xhr);
    });
    xhrs.push(xhr);

    // Step 2
    xhr = $.getJSON(params, function() {
        //...stuff...

        // Step 3
        var xhrs2 = [];
        $.each(function() {
            xhr = ajaxCall3();
            xhrs.push(xhr);
            xhrs2.push(xhr);
        });

        // Step 4
        xhr = ajaxCall4().success(function() {
            xhr = ajaxCall5().success(function() {
                //....
            });
            xhrs.push(xhr);
        });
        xhrs.push(xhr);


        // Step 5
        $.when(xhrs2).then(function() {
            $.each(function() {
                xhr = ajaxCall5();
                xhrs.push(xhr);
            });
        });

    });
    xhrs.push(xhr);
});


$.when.apply($, xhrs).then(function() {
    // Run when all ajax calls completed
});

我试过把它移到不同的地方,没有运气。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

$.when函数将每个XHR作为参数,然后您可以在then的{​​{1}}中进行响应。每个响应都作为单独的参数传递。

when

答案 1 :(得分:-3)

您是否尝试过让每个请求同步? jquery中的简单同步请求如下所示:

jQuery.ajax({
     url:    'http://example.com' ,
     success: function(result) {
                      //Do stuff with result
              },
     async:   false
});