Ajax调用完成后执行函数

时间:2014-04-25 02:40:58

标签: javascript jquery ajax json

我是Ajax的新手,我正在尝试在使用for循环时使用Ajax。在Ajax调用之后,我正在运行一个使用Ajax调用中创建的变量的函数。该功能仅执行两次。我认为Ajax调用可能没有足够的时间在循环重启之前进行调用。有没有办法在运行函数printWithAjax()之前确认Ajax调用? 我不想在Ajax调用完成之前执行printWithAjax()函数。我们非常感谢任何帮助。

var id;
var vname;
function ajaxCall(){
for(var q = 1; q<=10; q++){
 $.ajax({                                            
         url: 'api.php',                        
         data: 'id1='+q+'',                                                         
         dataType: 'json',
         async:false,                    
         success: function(data)          
         {   
            id = data[0];              
            vname = data[1];
         }
      });

       printWithAjax(); 

 }//end of the for statement
}//end of ajax call function

6 个答案:

答案 0 :(得分:50)

试试这段代码:

var id;
var vname;
function ajaxCall(){
for(var q = 1; q<=10; q++){
 $.ajax({                                            
     url: 'api.php',                        
     data: 'id1='+q+'',                                                         
     dataType: 'json',
     async:false,                    
     success: function(data)          
     {   
        id = data[0];              
        vname = data[1];
     },
    complete: function (data) {
      printWithAjax(); 
     }
    });

  }//end of the for statement
  }//end of ajax call function

&#34;完成&#34;函数仅在&#34;成功&#34;之后执行。 of ajax。因此,尝试在&#34;完成&#34;上调用printWithAjax()。这应该适合你。

答案 1 :(得分:21)

您可以使用.ajaxStop().ajaxComplete()

完成页面上的每个AJAX请求后,

.ajaxComplete() 会触发。

$( document ).ajaxComplete(function() {
  yourFunction();
});
完成页面上的所有AJAX请求后,

.ajaxStop() 会触发。

$( document ).ajaxStop(function() {
  yourFunction();
});

答案 2 :(得分:10)

将.done()添加到您的函数

var id;
var vname;
function ajaxCall(){
for(var q = 1; q<=10; q++){
 $.ajax({                                            
         url: 'api.php',                        
         data: 'id1='+q+'',                                                         
         dataType: 'json',
         async:false,                    
         success: function(data)          
         {   
            id = data[0];              
            vname = data[1];
         }
      }).done(function(){
           printWithAjax(); 
      });



 }//end of the for statement
}//end of ajax call function

答案 3 :(得分:1)

你应该在头部设置async = false。 使用post / get而不是ajax。

jQuery.ajaxSetup({     async:false });

    $.post({
        url: 'api.php',
        data: 'id1=' + q + '',
        dataType: 'json',
        success: function (data) {

            id = data[0];
            vname = data[1];

        }
    });

答案 4 :(得分:1)

var id;
var vname;
function ajaxCall(){
for(var q = 1; q<=10; q++){
 $.ajax({  

 url: 'api.php',                        
 data: 'id1='+q+'',                                                         
 dataType: 'json',
 success: function(data)          
  {

    id = data[0];              
   vname = data[1];
   printWithAjax();
}
      });



}//end of the for statement
  }//end of ajax call function

答案 5 :(得分:0)

.done()附加到您的ajax请求。

$.ajax({
  url: "test.html",
  context: document.body
}).done(function() { //use this
  alert("DONE!");
});

请参阅.done()的{​​{3}}