jquery:等待所有ajax调用完成后再继续。

16 浏览
0 Comments

jquery:等待所有ajax调用完成后再继续。

这个问题已经有了答案

等待所有jQuery Ajax请求完成

我在document.ready()中有一些ajax调用

例如:

for (j=1; j <= 7; j++){
  (function(index) {
    $.getJSON('my.php', {id:index}, 
      function(data) {
         $.each(data, function(index2, array){
         ........
         });  
      });
    })(j)
} 
//DO NOT CONTINUE UNTIL FINISH AJAX CALLS   
 ........
MORE JQUERY CODE

我该如何强制它等待,直到我们从ajax请求中得到所有回调才继续?

admin 更改状态以发布 2023年5月21日
0
0 Comments

首先,你可能要考虑将启动代码放在一个单独的调用中完成。
其次,不要等待,只需调用另一个函数。对于上面的代码,它应该像这样:

for (j=1; j <= 7; j++){
  (function(index) {
    $.getJSON('my.php', {id:index}, 
      function(data) {
         $.each(data, function(index2, array){
         ........
         }); 
         if (j === 7) {
            initDoneDoMoreStuff()
         }
      });
    })(j)
} 

或者触发:

for (j=1; j <= 7; j++){
  (function(index) {
    $.getJSON('my.php', {id:index}, 
      function(data) {
         $.each(data, function(index2, array){
         ........
         }); 
         if (j === 7) {
            $(document).trigger("initdone");
         }
      });
    })(j)
}
$(document).bind("initdone", function() {....});

0
0 Comments

我不喜欢任何答案,最好的方法(自Jquery 1.5+以来)是使用Deferred对象,这些对象用于操作异步调用,您可以解决:

$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
  .then(myFunc, myFailure);

通过这种方式,myFunc在完成2个ajax调用后执行,如果出现任何一个错误,则执行myFailure。

您可以在jquery官方文档中了解更多信息:JQuery Deferred Object

如果有人看到这篇文章,这种解决方案可能会有所帮助。

对不起我的英语:P

0