链接一系列ajax调用

时间:2013-06-10 05:15:37

标签: jquery ajax

我有一系列需要按顺序运行但不同步的ajax调用。最好的方法是什么?

我知道我可以$.when().then(),但这只适用于两个ajax调用,不是吗?理想情况下,我喜欢做类似的事情:

var caller;
for (var i = 0; i < argObjects.length; i++) {
    if (typeof caller === 'undefined') {
        caller = $.when($.ajax(... data: argObjects[i]...));
    }
    else {
        caller.then($.ajax(... data: argObjects[i]...));
    }
}

换句话说,只需点击then上的一个系列就可以将它们连在一起。但这是不可能的。有没有其他方法可以用jQuery做到这一点?

重要的是要注意这些调用不能同时运行。我可以在set async: false上对它们进行循环,但是当它处理不好时,它会控制用户远离它。

考虑它的另一种方法是在一次调用中发送所有内容......但是如何在运行时监视该任务的进度?假设我有10周的数据要更新,我希望在每周完成时收到通知。如果我发送了10个连续的ajax调用,每个调用都可以返回并告诉我它已经完成,我可以更新某种进度条。这真的是这里的终极目标。

在此期间,我会继续尝试在jQuery中绕过deferreds。

2 个答案:

答案 0 :(得分:2)

您可以使用成功处理程序采用不同的方法来启动下一个ajax调用,并使用计数器来跟踪您正在运行的请求:

var i = 0;
function run() {
    $.ajax(... data: argObjects[i]..., function() {
        i++;
        if (i < argObjects.length) {
            run();
        }
    });
}
run();

答案 1 :(得分:1)

对于顺序ajax调用我所拥有的是在第一个ajax的成功中调用另一个ajax。

像这样: -

function ajax1(){
  $.ajax({
    url: "",
    data: dataString,
    type: "POST" ,
    dataType: "text",
    cache: false,   
    success: function(response_data){
        ajax2(); // call second ajax on success
    }
  });
}

function ajax2(){
  $.ajax({
    url: "",
    data: dataString,
    type: "POST" ,
    dataType: "text",
    cache: false,   
    success: function(response_data){

    }
  });
}