jquery:等到所有ajax调用完成然后继续

时间:2010-10-17 07:26:25

标签: javascript jquery ajax wait

我的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请求中获得所有回调,我怎么能强迫它等待而不是继续?

5 个答案:

答案 0 :(得分:16)

我根本不喜欢任何答案,最好的方法(因为Jquery 1.5+)是使用Deferred对象,那些是操纵异步调用的对象,你可以解决:

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

这样,myFunc在进行2次ajax调用后执行,而myFailure如果其中任何一次调用都有错误。

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

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

对不起我的英文:P

答案 1 :(得分:6)

首先,您可能需要考虑在一次通话中执行启动代码 第二:而不是等待只是调用另一个函数调用。对于上面的代码,它应该看起来像:

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() {....});

答案 2 :(得分:3)

我这样做并不容易,但也许你发现我的代码很有用。这是一个在dom中提交所有表单的过程,在存储完所有表单后,将用户重定向到另一个页面。

formulario = $('form');
formulariolongitud = formulario.length;
i = 0;

formulario.each(function(index, value) {
    $(this).ajaxSubmit({
        async: false,//not sure i
        success: function() {
            i++; 

            if(i === formulario.length) {//this is the last one to submit
                window.location.replace(whatever);
            }
        } 
    });                         
});

答案 3 :(得分:1)

你可以使用sucess(即ajax jquery的回调函数),如下所示:

$.ajax({
  url: url,
 dataType: 'json',
 data: data,
 success: function(data){
 //Write your code here.
    }
});

您可以在下面获取ajax的文档 -

ajax

答案 4 :(得分:0)

if(j == 7)之类的问题是当第7个请求非常快时,甚至其中一个请求很慢的情况。即使你最后排队,也可能不是最后完成的。

这个答案似乎适用于所有条件: https://stackoverflow.com/a/3709809/813154