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