Lassen Sie mich meinen Code ein wenig erklären (Entschuldigung, wenn etwas falsch ist, ich habe dieses Beispiel nur von Grund auf neu geschrieben, es ist sehr nah an dem, was ich gerade habe).
HTML:
%Vor%JS:
%Vor%JSFiddle (Umleitung entfernt und Ajax-Aufruf durch Konsolenprotokoll für Geige ersetzt)
Der HTML-Code ist ein einfaches Formular mit den Eingabefeldern für die E-Mail-Adressen der Freunde und Freunde.
Der JS hat eine jede Funktion, die, wenn der Name und die zugehörige E-Mail Werte haben, einen Ajax-Aufruf ausführt.
Ich brauche einen Weg, damit diese Ajax-Aufrufe ausgeführt werden (es könnte 1 Schleife geben, es könnten 15 sein) und dann, nachdem alle fertig sind, umleiten zu einer neuen Seite.
Die derzeitige Art, wie ich es mache, ist schrecklich, da alle Ajax-Aufrufe nicht beendet werden, bevor die Seite umgeleitet wird.
Was kann ich tun, um das besser zu machen? Es muss narrensicher sein und NUR umleiten, sobald alle Ajax-Aufrufe beendet sind (Erfolg oder Fehler, es spielt keine Rolle - es muss nur umgeleitet werden, sobald es fertig ist).
Ich habe versucht, async: false
zu verwenden, aber es scheint keinen Unterschied zu machen.
Ich habe darüber nachgedacht, einen Zähler in jede Funktion und einen Zähler in der Ajax-Erfolgsfunktion zu setzen, und wenn beide übereinstimmen, dann führe die Weiterleitung durch, aber ich suche nach mehr erfahrenen Anleitungen.
Ok, das ist ziemlich einfach, da du jQuery benutzt. jQuery kommt mit einem integrierten Promoter, der auch mit den Ajax-Aufrufen von jQuery verbunden ist. Was bedeutet das? Nun, wir können leicht so gehen:
%Vor% Hinweis: Der obige Code wird nur ausgelöst, wenn alle Anforderungen erfolgreich abgeschlossen wurden. Wenn Sie den Fall bearbeiten müssen, wenn ein oder mehrere angeforderte Fehler fehlgeschlagen sind, verwenden Sie auch .then()
oder .fail()
anstelle von .done()
.
Behalten Sie einfach einen Zähler der AJAX-Anrufe und prüfen Sie, ob alle abgeschlossen sind. Etwas wie das:
%Vor%Standardmäßig ist $ .ajax asynchron. Fügen Sie in den Optionen, die übergeben werden,
hinzu %Vor%Damit werden die Anrufe serialisiert, die Sie ausführen, so wie Sie möchten.
Nach dem Kommentieren des Originalposters besteht die mögliche Lösung darin, Folgendes zu tun:
Hinweis, ich habe keine Informationen über die Thread-Sicherheit bei der Durchführung dieser Art von Operation so YMMV.
Beispielcode:
%Vor%Tags und Links javascript jquery ajax each