Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 链接一系列ajax调用_Jquery_Ajax - Fatal编程技术网

Jquery 链接一系列ajax调用

Jquery 链接一系列ajax调用,jquery,ajax,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]

我有一系列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]...));
    }
}
var调用方;
对于(var i=0;i
换句话说,只要在
上加上一个系列,然后
就可以把它们连在一起。但这是不可能的。使用jQuery还有其他方法吗

需要注意的是,这些调用不能同时运行。我可以按set
async:false
在它们上运行一个循环,但这会在用户处理不好的内容时夺走用户的控制权

另一种思考方法是在一个电话中发送所有信息。。。但是,如何在任务运行时监控其进度呢?假设我有10周的数据要更新,我希望在每周完成时收到通知。如果我连续发送10个ajax调用,每个调用都会返回并告诉我它已经完成,我可以更新某种进度条。这才是这里的终极目标


在此期间,我将继续努力解决jQuery中的延迟问题。

对于顺序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){

    }
  });
}

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

var i = 0;
function run() {
    $.ajax(... data: argObjects[i]..., function() {
        i++;
        if (i < argObjects.length) {
            run();
        }
    });
}
run();
var i=0;
函数运行(){
$.ajax(…数据:argObjects[i]…,函数(){
i++;
if(i<代码>如果中间有一个失败,你想继续运行其余的请求吗?将调用链接到
success
似乎会阻止它。@slebetman-谢谢。您的解决方案与jfriend00的类似,如果您有点喜欢的话!啊,血腥的递归。为什么我没想到呢?让我来做点什么,看看它是否奏效。@Depressio-它实际上不是技术上的递归(尽管它看起来有点像)。
run()
的第一次调用实际上是在调用成功处理程序之前完成的,因此在下一次执行
run()
starts.True之前。回调有点不同。不过看起来很像。不管怎样,我试了一下,效果很好。我想我是想用延迟链接太花哨了。:)通过将函数存储在数组中,可以很容易地概括这一点。参见:类似的内容。