2

我有一系列需要按顺序运行的 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 中的延迟。

4

2 回答 2

2

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

var i = 0;
function run() {
    $.ajax(... data: argObjects[i]..., function() {
        i++;
        if (i < argObjects.length) {
            run();
        }
    });
}
run();
于 2013-06-10T05:25:22.620 回答
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){

    }
  });
}
于 2013-06-10T05:24:53.263 回答