Ajax调用完成后执行函数

sta*_*at8 37 javascript ajax jquery json

我是Ajax的新手,我在尝试使用Ajax时使用for循环.在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
Run Code Online (Sandbox Code Playgroud)

Nav*_*ari 54

试试这段代码:

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
Run Code Online (Sandbox Code Playgroud)

"完成"功能仅在ajax"成功"之后执行.因此,尝试在"完成"上调用printWithAjax().这应该适合你.

  • 无论 ajax 调用成功/失败,完整的回调都会执行 (6认同)
  • 错误的!每次都会调用complete /sf/answers/2956079311/ (2认同)

Muk*_*ain 22

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

.ajaxComplete() 在页面上完成每个AJAX请求后触发.

$( document ).ajaxComplete(function() {
  yourFunction();
});
Run Code Online (Sandbox Code Playgroud)

.ajaxStop() 完成页面上的所有AJAX请求后触发.

$( document ).ajaxStop(function() {
  yourFunction();
});
Run Code Online (Sandbox Code Playgroud)

  • 不,ajaxComplete 很早就执行了,实际上是没有用的。 (4认同)

Geo*_*Geo 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
Run Code Online (Sandbox Code Playgroud)

  • 完成与`success`相同.你想要".always()"` (5认同)

Rya*_*ith 1

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

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

请参阅JQuery 文档.done()