Bonjour à tous,
Pour un de mes projets je dois faire des requêtes AJAX dans une boucle for
for(var i = 0; i < contacts.length; i++) {
$.ajax({
url: href,
type: "post",
data: datas,
success: function(response) {
if(!response.result) {
alert('Tu as tout planté !');
}
}
});
}
// suite de mon script qui doit attendre la fin réelle des requêtes AJAX
Le problème est que tout les requêtes AJAX partent en même temps et je n'ai aucun moyen de savoir (ou du moins je ne connais pas encore) quand toutes mes requètes AJAX sont terminés.
Ou alors, il faudrait que toutes mes requêtes AJAX se lancent les unes après les autres. Quand la première est terminée, elle lance la deuxième. Car j'ai un système d'incrémentation dans une popup ...
J'ai regardé sur la doc il exite la fonction $.when().then(); mais j'ai le même problème.
Des idées ?
Merci d'avance et bon weekend
Bonjour ,
Une solution :
var requestCompleted = 0;
for(var i = 0; i < contacts.length; i++) {
$.ajax({
url: href,
type: "post",
data: datas,
success: function(response) {
requestCompleted ++;
if(!response.result) {
alert('Tu as tout planté !');
break ; //si le but est de stopper si ya une erreur
}
requestCompleted++;
if(requestCompleted == contacts.length){
suite();
}
}
});
}
var suite = function(){
//la suite du script
};
Bonjour, il existe une fontion jquery qui se déclenche quand toutes les requetes ajax sont terminé.
$( document ).ajaxComplete(function() {
$( ".log" ).text( "Triggered ajaxComplete handler." );
});
Voila si sa peu aider!
Salut,
L'idee est bonne mais dans ce cas je ne detecte qu'une fois que ma derniere requete est terminee et non une fois que toutes mes requetes sont terminees. deplus je vais avoir le meme resultat car toutes mes requetes vont se lancer rapidement et je vais avoir la suite de ma fonction directement.
Faux parce que c'est asynchrone;
L'ordre de déclenchement des callback n'est pas prévisible;
Ici on compte le nombre de retour obtenu, peu importe l'ordre... donc effectivement le script se déclenche lorsque la dernière réponses est reçue au sens toutes les réponses ont été reçues (pas au sens où la réponse de la dernière requête est arrivée)
Autant pour moi, j'avais mal vu sur mobile, effectivement ton systeme peut marcher. Je testerai ca Lundi
Tu peux avoir lancé req1, req2 et req3 dans l'ordre mais avoir reçu rep2,rep1 puis rep3 (si on note repX la réponse de reqX)
Au final si on se dit j'ai 3 réponses à obtenir et qu'on met un compteur :
rep reçue => compteur +1
rep' reçue => compteur +1
rep '' reçue => compteur +1
3 réponses obtenues, on arrête.. on se moque de savoir à quoi correspondent les réponses, on sait que c'est terminé.
Je viens de test et merci.
Par contre, j'ai ce message avec le break : Uncaught SyntaxError: Illegal break statement
Une autre astuce pour couper le script ?