Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Ajax调用完成后执行函数_Javascript_Jquery_Ajax_Json - Fatal编程技术网

Javascript 在Ajax调用完成后执行函数

Javascript 在Ajax调用完成后执行函数,javascript,jquery,ajax,json,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<=1

我是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
var-id;
var-vname;
函数ajaxCall(){
对于(var q=1;q将
.done()
附加到ajax请求中

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

有关
.done()

的信息,请参见。您应该在head中设置async=false。 使用post/get而不是ajax

jQuery.ajaxSetup({ 异步:false }))

试一试

var-id;
var-vname;
函数ajaxCall(){
对于(var q=1;qAdd.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
var-id;
var-vname;
函数ajaxCall(){
对于(var q=1;q请尝试以下代码:

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
var-id;
var-vname;
函数ajaxCall(){
对于(var q=1;q您可以使用或

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

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

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

因为您使用的是
asycn:false
(如果可能,永远不要使用它),打印将仅在ajax完成后执行…但正确的解决方案是在成功回调中调用print函数,并将id和vname作为参数传递。您希望printWithAjax为每个ajax调用触发一次吗?例如-如果不能删除,您还想确保ajax请求按顺序执行吗
async:false
既然您只需要传递数字1-10,为什么不将数组或范围(1-10)传递给您的服务器并只进行一次ajax调用呢?而不是进行10次ajax请求。您还可以循环数据以控制其显示。完成与
成功
相同。您需要
”。始终()
@MichelAyres我认为成功只有在成功的情况下才会运行,不管发生什么事情,成功都会运行…
无论发生什么事情,都会运行
另请看一看否,ajaxComplete执行得很早,实际上毫无用处。无论ajax调用成功与否,都会执行complete回调错误!每次都会调用complete