我有一系列需要按顺序运行但不同步的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。
答案 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){
}
});
}