Question

J'ai testé les nouvelles fonctions AJAX différés jquery 1.5 et je suis impressionné par leur simplicité et leur puissance. Il y a une question plus que je l'ai rapporté à la meilleure façon de faire la queue ces demandes.

J'ai deux scénarios: série et parallèle, si vous voulez. Je veux éviter les termes de synchronisation / async parce que je ne veux tous ces être des requêtes asynchrones afin que l'utilisateur peut effectuer d'autres actions en attendant que la file d'attente à traiter. Je veux ensuite appeler une fonction unique lorsque la file d'attente a terminé le traitement.

En mode « série » ayant deux demandes que je voudrais les traiter comme suit:

Requesta -> Réponse tous -> RequestB -> ResponseB -> EndOfQueue

En mode « parallèle » avec deux demandes Je veux ce résultat:

Requesta -> RequestB (Réponse tous, ResponseB générée chaque fois prêt) -> EndOfQueue

Dans les deux cas, le cas échéant requête échoue, je veux la file d'attente d'arrêter et de passer le contrôle à une fonction d'échec.

J'ai des exigences qui spécifient une longueur de la file d'attente dynamique, donc je ne pense pas que je serai en mesure de chaîne juste un tas de .alors () ou .Lorsque () deferreds ensemble comme je ne sais pas si elle est l'un ou cent articles. J'exécutais la logique métier sur un serveur afin batching du côté serveur via l'API d'un fournisseur sera difficile car je n'ai pas le contrôle de ce code.

J'ai construit des cas de test qui effectuent le cas « parallèle » et appellent le quand () fonction après tous ont terminé avec succès, mais ces tests ne sont pas dynamiques dans la longueur de la file d'attente et ne sont pas portables au modèle de série.

Je peux voir comment je pourrais créer un objet de file d'attente personnalisée pour gérer cela, mais il semble que toutes les pièces sont déjà écrites pour moi dans jquery (?). Je l'ai regardé, mais ne l'ai pas trouvé un exemple qui couvre les demandes successives de cette façon.

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

Était-ce utile?

La solution

La façon la plus simple pour atteindre votre Requesta -> Réponse tous -> RequestB - commande> de ResponseB serait d'utiliser quelque chose comme ceci:

var queue = [];

function qNext() {
    $.ajax(queue.shift()).success(qNext);
}

function qAjax(options) {
    queue.push(options);
}

qAjax({
    // $.ajax options
});

qAjax({
    // $.ajax options
});

qNext();

Voir DEMO .

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

Êtes-vous sûr que vous ne voulez pas l'ordre de Requesta -> RequestB -> Réponse tous -> ResponseB

Autres conseils

S'il vous plaît référer aux deux questions que j'ai demandé

  1. jQuery différé ne fonctionne pas
  2. jQuery.when comprendre

Si tout va bien, vous devriez être en mesure de comprendre le concept.

Voir cette commentaire sur .Lorsque ( ) méthode de fonctions AJAX différés

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top