Comment agir lorsque tous les appels ajax de chaque boucle aboutissent?

J’appelle la fonction ajax jquery dans chaque boucle et je veux effectuer une action au moment où tous les appels ajax dans la boucle se terminent et aboutissent.

$(".checked-box").each(function () { // ajax call goes here }); $('.messsage').html('all requests done'); 

Comment faire ça? sans async: false car cela bloque le navigateur.

C’est une façon:

 var numberOfPendingRequests = 8; $(".checked-box").each(function () { $.ajax({ success: function(){ ... numberOfPendingRequests --; if(numberOfPendingRequests == 0) allDone(); } }); }); function allDone(){ $('.messsage').html('all requests done'); } 

Vous pouvez calculer le nombre initial de numberOfPendingRequests fonction de votre nombre de cases à cocher ou le démarrer à 0 et l’incrémenter avant chaque demande d’ajax, mais c’est l’idée générale.

J’espère que cela t’aides. À votre santé

Les programmes différés peuvent simplifier votre travail.

 var deferreds = $('.checked-box').map(function(i, elem) { return $.ajax(params); }); $.when.apply(null, deferreds.get()).then(function() { ... }); 

J’espère que cela devrait fonctionner.

Le concept est

 $.when( $.ajax( "1" ), $.ajax( "2" ), $.ajax( "3" ) ).then( successFunc, failureFunc ); 

Essaye ça:

 AjaxRequestCount = 0; //JUST prepare ajax requests here, do not send yet... $(".checked-box").each(function () { AjaxRequestCount += 1; //Count number of ajax request //set "success:" of each ajax to Success() function }); //Send ajax requests here, use a loop... for(i=0;i 

Regardez la section 3.1 de ce post pour un exemple complet d’attendre la fin de choses asynchrones