Выполнить функцию после завершения вызова Ajax

Я новичок в Ajax, и я пытаюсь использовать Ajax при использовании цикла for. После вызова Ajax я запускаю функцию, которая использует переменные, созданные в вызове Ajax. Функция выполняет только два раза. Я думаю, что вызов Ajax может не иметь достаточно времени, чтобы выполнить вызов до начала цикла. Есть ли способ подтвердить вызов Ajax перед запуском функции printWithAjax()? Я не хочу, чтобы функция printWithAjax() выполнялась до тех пор, пока вызов Ajax не будет завершен. Любая помощь будет принята с благодарностью.

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

Ответы

Ответ 1

Попробуйте этот код:

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

"Полная" функция выполняется только после "успеха" ajax. Поэтому попробуйте вызвать printWithAjax() на "complete". Это должно сработать для вас.

Ответ 2

Вы можете использовать .ajaxStop() или .ajaxComplete()

.ajaxComplete() запускается после завершения каждого запроса AJAX на вашей странице.

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

.ajaxStop() запускается после завершения всех запросов AJAX на вашей странице.

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

Ответ 3

Добавить .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

Ответ 4

Вы должны установить 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];

        }
    });

Ответ 5

попробовать

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

Ответ 6

Добавить .done() в ваш запрос ajax.

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

См. JQuery Doc для .done()