web-dev-qa-db-fra.com

Exécuter la fonction une fois l'appel Ajax terminé

Je suis nouveau sur Ajax et je tente d’utiliser Ajax avec une boucle for. Après l'appel Ajax, j'exécute une fonction qui utilise les variables créées dans l'appel Ajax. La fonction ne s'exécute que deux fois. Je pense que l'appel Ajax n'aura peut-être pas assez de temps pour faire l'appel avant que la boucle ne recommence. Est-il possible de confirmer l'appel Ajax avant d'exécuter la fonction printWithAjax ()? Je ne veux pas que la fonction printWithAjax () soit exécutée tant que l'appel Ajax n'est pas terminé. Toute aide sera grandement appréciée.

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
35
stat8

Essayez ce code:

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

La fonction "complete" ne s'exécute qu'après le "succès" de ajax. Essayez donc d'appeler le printWithAjax () sur "complete". Cela devrait fonctionner pour vous.

51

Vous pouvez utiliser .ajaxStop() ou .ajaxComplete()

.ajaxComplete() se déclenche après l'achèvement de chaque demande AJAX sur votre page.

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

.ajaxStop() se déclenche une fois toutes les demandes AJAX effectuées sur votre page).

$( document ).ajaxStop(function() {
  yourFunction();
});
21
Mukesh Chapagain

Ajouter .done () à votre fonction

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
10
Geo

Vous devez définir async = false en tête. Utilisez post/get au lieu de ajax.

jQuery.ajaxSetup ({async: false});

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

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

        }
    });
0
Phong Ca

essayer

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
0