Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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
当每个循环中的所有ajax调用都成功时,如何采取行动?_Ajax_Jquery - Fatal编程技术网

当每个循环中的所有ajax调用都成功时,如何采取行动?

当每个循环中的所有ajax调用都成功时,如何采取行动?,ajax,jquery,Ajax,Jquery,我在每个循环中调用ajax jquery函数,我想在循环中所有ajax调用完成并成功时执行一个操作 $(".checked-box").each(function () { // ajax call goes here }); $('.messsage').html('all requests done'); 怎么做?没有async:false,因为这会阻塞浏览器。这是一种方法: var numberOfPendingRequests = 8; $(".checked-box").e

我在每个循环中调用ajax jquery函数,我想在循环中所有ajax调用完成并成功时执行一个操作

$(".checked-box").each(function () {
     // ajax call goes here
});
$('.messsage').html('all requests done');
怎么做?没有
async:false
,因为这会阻塞浏览器。

这是一种方法:

var numberOfPendingRequests = 8;
$(".checked-box").each(function () {   
   $.ajax({
     success: function(){
        ...
        numberOfPendingRequests --;
        if(numberOfPendingRequests == 0) allDone();
     }
   });
});
function allDone(){
  $('.messsage').html('all requests done');
}
您可以根据复选框的数量计算初始的
numberOfPendingRequests
,或者在每次ajax请求之前以0开始,但这是一般的想法

希望这有帮助。干杯

试试这个:

AjaxRequestCount = 0;
//JUST prepare ajax requests here, do not send yet...
$(".checked-box").each(function () {
     AjaxRequestCount += 1; //Count number of ajax request
     //set "success:" of each ajax to Success() function
});

//Send ajax requests here, use a loop...

for(i=0;i<AjaxRequestCount;i++)
{
   //ajax[i].send
} 

//Fires for each ajax success...
function Success()
{
    SuccessAjaxRequestCount += 1;
    Check(); //Check right after each ajax success
}

//Checks if already reached the expected number of ajax success...
function Check()
{
    if(SuccessAjaxRequestCount  == AjaxRequestCount )
    {
        alert("done!");
    }
}
AjaxRequestCount=0;
//只需在此处准备ajax请求,暂时不发送。。。
$(“.复选框”)。每个(函数(){
AjaxRequestCount+=1;//计算ajax请求的数量
//将每个ajax的“success:”设置为success()函数
});
//在这里发送ajax请求,使用循环。。。

对于(i=0;i请参阅的第3.1节,了解等待异步工作结束的完整示例延迟可以使您的工作更简单

var deferreds = $('.checked-box').map(function(i, elem) {
  return $.ajax(params);
});

$.when.apply(null, deferreds.get()).then(function() { ... });
希望这能奏效

这个概念是

$.when(
    $.ajax( "1" ),
    $.ajax( "2" ),
    $.ajax( "3" )
).then( successFunc, failureFunc );

您是想知道每次ajax调用之后,还是想知道所有调用都在循环中完成之后所有调用都在循环中完成检查jquery deferred。这主要是与jquery.when([deferred])的组合会有帮助的。它对我很有效,并且在循环结束和所有ajax调用时显示了一次警报。是的,我犯了一个错误,现在我添加了一个循环,在ajax准备之后发送ajax请求,以便
成功:
在所有ajax都准备好发送之前不会触发每个ajax。@amr,他在我的评论之后修改了代码,无论如何,这很酷Tworks@Amr-您可能会遇到像kobe这样的问题,如果ajax在发送旁边的ajax之前收到成功响应,该如何处理?
SuccessAjaxRequestCount==AjaxRequestCount
将为真,将弹出警报!请查看修订。谢谢!很好,但我还不熟悉延迟,例如,如果我将.each循环。它什么时候能工作?会得到ajax成功响应吗?ajax中的成功函数类似于延迟函数。一旦特定请求响应,就会调用它。在成功中,你可以做任何你想做的事情。也就是说,在每个ajax响应之后。我还没有用每个函数测试代码。上面的代码大部分应该是有效的k、 我将测试它,稍后再发布编辑。我使用进行了测试。每个都没有等到所有循环完成,然后在之前运行:(