11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'utilise jQuery dans une application en Ajax et je veux boucler sur des éléments lançant une requête vers le serveur.

Cependant, je me rend compte que each ne boucle pas réellement, mais lance tous les appels un à la suite de l'autre. Hors, je ne reçois pas les résultats dans l'ordre que les appels devraient être envoyé, mais pêle-mêle selon ce que le serveur a pu me servir en premier.

Y-a-t'il moyen de garder les appels Ajax ordonné via la fonction .each() ou une autre ?

Merci !
Modifié par Vaxilart (11 Aug 2011 - 01:43)
Voilà le code:


$(".phpc-calendar .cal-active").each(function(){
    $.get($(this).attr('href'), function(data, textStatus, jqXHR){
        $(data).children(".phpc-main").appendTo("#include-event");
    });
});


Je boucle donc sur des liens pour lesquels je récupère le contenu par un appel Ajax.

Mais .each() semble lancer tous les appels en même temps (ou alors n'attend pas la réponse de l'appel Ajax avant de continuer la boucle).

Comme il s'agit d'un calendrier, je voudrais évidemment récupérer les évènements dans l'ordre.

(P.S.: Je sais que ce n'est vraiment pas la solution idéale, mais j'ai assez peu de flexibilité pour aller refaire des scripts PHP avec les contraintes du contrat. Dans le pire des cas c'est ce que je ferai, mais il doit bien y avoir une manière d'enchainer ces appels et les recevoir en ordre, non ?)
C'est le principe même d'AJAX le fait que les appels sont asynchrones.
Donc, soit tu utilises le paramètre async de AJAX.

$(".phpc-calendar .cal-active").each(function(){ 
    $.ajax({
        url: $(this).attr('href'), 
        async:false,
        success: function(data){ 
              $(data).children(".phpc-main").appendTo("#include-event"); 
        }
    }); 
}); 


Ou tu regardes du côté de ce plugin : http://plugins.jquery.com/project/ajaxqueue
Modifié par vincentD83 (10 Aug 2011 - 09:33)