当每个循环中的所有ajax调用成功时,如何执行操作?

我在.each循环中调用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为增量开始计算,但这是一般的想法。

希望这可以帮助。 干杯

延期可以使您的工作更简单。

 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 ); 

试试这个:

 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 

请查看本文第3.1节,了解等待异步内容结束的完整示例