Frage

Ich habe die neuen aufgeschobenen AJAX -Funktionen in JQuery 1.5 getestet und bin von ihrer Einfachheit und Kraft beeindruckt. Es gibt eine größere Frage, die ich auf den besten Weg zu diesen Anfragen zu tun habe.

Ich habe zwei Szenarien: seriell und parallel, wenn Sie so wollen. Ich möchte die SYNC/ASync -Begriffe vermeiden, da ich möchte, dass all diese asynchronen Anforderungen sind, damit der Benutzer andere Aktionen ausführen kann, während die Warteschlange verarbeitet wird. Ich möchte dann eine einzelne Funktion aufrufen, wenn die Warteschlange die Verarbeitung abgeschlossen hat.

Im "Seriennodus" mit zwei Anfragen möchte ich, dass sie wie folgt verarbeitet werden:

Requesta -> Responsea -> RequestB -> Antwort -> endofqueue

Im "Parallelmodus" mit zwei Anfragen möchte ich dieses Ergebnis:

Requesta -> RequestB (Responsea, Antwortb

Wenn eine Anfrage fehlschlägt, möchte ich, dass die Warteschlange stoppt und die Kontrolle an eine Fehlerfunktion übergibt.

Ich habe Anforderungen, die eine dynamische Warteschlangenlänge festlegen, daher glaube ich nicht . Ich führe die Geschäftslogik auf einem Server über die API eines Anbieters aus, sodass die serverseitige Stapel schwierig ist, da ich keine Kontrolle über diesen Code habe.

Ich habe Testfälle erstellt, die den Fall "Parallel" durchführen und die WO) -Funktion aufrufen, nachdem alle erfolgreich abgeschlossen wurden, diese Tests jedoch nicht in der Warteschlangenlänge dynamisch sind und für das Serienmodell nicht tragbar sind.

Ich kann sehen, wie ich ein benutzerdefiniertes Warteschlangenobjekt erstellen kann, um dies zu behandeln, aber es scheint, als ob alle Teile bereits für mich in JQuery (?) Geschrieben sind. Ich habe gesucht, aber kein Beispiel gefunden, das auf diese Weise sequenzielle Anforderungen abdeckt.

Irgendwelche Gedanken darüber, wie man damit mit der JQuery -Warteschlange/aufgeschobener Funktionalität umgeht?

War es hilfreich?

Lösung

Der einfachste Weg, um Ihre Requesta -> Responsea -> RequestB -> Antwortbilanz zu erreichen, würde so etwas verwenden:

var queue = [];

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

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

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

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

qNext();

Sehen DEMO.

Dies ist eine etwas vereinfachte Version Ihrer Anforderungen, aber es wäre einfach, einen Rückruf hinzuzufügen, nachdem die Warteschlange leer ist.

Sind Sie sicher, dass Sie nicht die Reihenfolge von Requesta -> RequestB -> Responsea -> Antwortb haben?

Andere Tipps

Bitte beachten Sie die beiden Fragen, die ich gestellt habe

  1. JQuery aufgeschoben nicht funktionieren
  2. JQuery.Wenn Verständnis

Hoffentlich sollten Sie das Konzept verstehen können.

Sieh dir das an Kommentar auf .When () Methode aus aufgeschobenen Ajax -Funktionen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top