6
votes

Comment gérer les files d'attente des demandes Ajax à JQuery 1.5?

J'ai testé les nouvelles fonctions d'Ajax différées à JQuery 1.5 et je suis impressionné par leur simplicité et leur pouvoir. Il y a une question plus grande que j'ai liée à la meilleure façon de faire la queue de ces demandes.

J'ai deux scénarios: série et parallèle, si vous voulez. Je souhaite éviter les termes de synchronisation / async car je souhaite que toutes ces personnes soient des demandes asynchrones afin que l'utilisateur puisse effectuer d'autres actions lors de l'attente de la file d'attente de traiter. Je veux ensuite appeler une seule fonction lorsque la file d'attente a terminé le traitement.

en "mode série" ayant deux demandes, je voudrais qu'ils soient traitées comme suit:

demanda -> Respective -> DemandeB -> ResponseB -> Endofqueue

en "mode parallèle" avec deux demandes que je veux ce résultat:

demanda -> DemandeB (Response, ResponseB traitée à tout moment) -> Endofqueue

Dans les deux cas, si une requête échoue, je voudrais que la file d'attente s'arrête et passe le contrôle à une fonction d'échec.

J'ai des exigences qui spécifient une longueur de file d'attente dynamique, donc je ne pense pas que je ne serais pas capable de simplement ficeler un tas de .quen () ou .Quand () différés ensemble comme je ne saurai pas si c'est un ou cent articles. J'exécute la logique commerciale sur un serveur via l'API d'un fournisseur afin que le serveur de serveur-côté sera difficile car je n'ai pas de contrôle sur ce code.

J'ai construit des cas de test qui effectuent le cas "parallèle" et appellent la fonction lorsque () après toutes les personnes terminées correctement, mais ces tests ne sont pas dynamiques de la longueur de la file d'attente et ne sont pas portables au modèle série.

Je peux voir comment je pourrais créer un objet de file d'attente personnalisé pour gérer cela, mais il semble que toutes les pièces soient déjà écrites pour moi à JQuery (?). J'ai regardé, mais je n'ai pas trouvé d'exemple qui couvre des demandes séquentielles de cette manière.

Toute réflexion sur la façon de gérer cela avec la fonctionnalité de la file d'attente JQuery / différée?


0 commentaires

3 Réponses :


0
votes

Voir ce Commentaire sur .Quand ( ) Méthode de fonctions AJAX différées


3 commentaires

Oui, j'ai effectivement utilisé cet exemple pour configurer mes cas de test avec quand () plus tôt. Ma question est de savoir comment utiliser ceux avec un nombre dynamique de demandes Ajax. Merci!


MMM ... Je pense que sur demande, mais je ne trouve pas un moyen de passer des déclarations d'exécution des fonctions comme des arguments. S'il y a une telle manière, cela ressemblera à ce $. Quand.apply (jQuery, aray_of_ajax_requests_queue); . Le problème est que Array_of_ajax_RequestSS_Queue doit être comme celui-ci [FUNC1 (), FUNC2 ()]


La question que je n'ai pas autant dans le moment où () mais plus sur la façon de démarrer la file d'attente et de le traiter.



4
votes

Le moyen le plus simple d'atteindre votre demande de demande -> Respective -> DecandeB -> La commande de réponseB utiliserait quelque chose comme ceci: xxx

voir démo .

Il s'agit d'une version quelque peu simplifiée de vos besoins, mais il serait facile d'ajouter un rappel à Courez après que la file d'attente est vide.

Êtes-vous sûr de ne pas vouloir l'ordre de demanda -> Demandeb -> Respective -> ResponseB?


3 commentaires

Merci! Je vais donner cela un coup. Dans cette application, nous devons nous assurer que la demande B n'est pas démarrée avant que la réponse a reçue, car il existe généralement des dépendances sur les résultats de A dans les instructions de B.


@Graham: Regardez le Modèles d'itération asynchrones Tutoriel de Pedro Teixeira. Il parle de nœud.js mais ces modèles peuvent être utilisés dans n'importe quel code JavaScript. Je pense que vous pourriez trouver des astuces utiles là-bas qui pourrait vous aider avec ce que vous essayez de faire. Je l'ai complètement oublié quand j'écrivais ma réponse.


Très intéressant, merci (encore) pour ce lien. Je reçois de bonnes idées sur la manière dont je peux construire un objet de la file d'attente Ajax personnalisé.



1
votes

Veuillez vous reporter aux deux questions que j'ai posées

  1. JQuery différé ne fonctionne pas
  2. JQuery.Lorsque la compréhension

    Espérons que vous devriez être capable de comprendre le concept.


1 commentaires

Désolé, cela ne semble pas que vous comprenez la question que je demande.