Ich habe ein Problem, wenn beim Senden eines Formulars alle aktiven Ajax-Anforderungen fehlschlagen und dies ein Fehlerereignis auslöst.
Wie kann ich alle aktiven Ajax-Anforderungen in jQuery stoppen, ohne ein Fehlerereignis auszulösen?
Jedes Mal, wenn Sie eine Ajax-Anfrage erstellen, können Sie eine Variable zum Speichern verwenden:
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
});
Dann können Sie die Anfrage abbrechen:
request.abort();
Sie können ein Array verwenden, das alle ausstehenden Ajax-Anforderungen verfolgt und sie bei Bedarf abbricht.
Mit dem folgenden Snippet können Sie eine Liste ( Pool ) von Anforderungen verwalten und diese bei Bedarf abbrechen. Am besten in
<HEAD>
Ihrem HTML-Code platzieren, bevor andere AJAX-Aufrufe getätigt werden.quelle
Object doesn't support property or method 'indexOf'
? Ich vermute, es könnte stackoverflow.com/a/2608601/181971 sein oder einfach zu stackoverflow.com/a/2608618/181971 wechseln ?Die Verwendung von ajaxSetup ist nicht korrekt , wie auf der Dokumentseite angegeben. Es werden nur Standardeinstellungen eingerichtet, und wenn einige Anforderungen diese überschreiben, kommt es zu einem Durcheinander.
Ich bin viel zu spät zur Party, aber nur zum späteren Nachschlagen, wenn jemand nach einer Lösung für das gleiche Problem sucht, hier ist mein Versuch, inspiriert von und weitgehend identisch mit den vorherigen Antworten, aber vollständiger
quelle
Folgendes verwende ich derzeit, um dies zu erreichen.
Hinweis: _.jeder von underscore.js ist vorhanden, aber offensichtlich nicht erforderlich. Ich bin nur faul und möchte es nicht in $ .each () ändern. 8P
quelle
aboutAll
sollte die Elemente aus dem Array entfernen. Wenn eine Anfrage abgeschlossen ist, sollte sie sich selbst aus der Liste entfernen.Geben Sie jeder xhr-Anforderung eine eindeutige ID und speichern Sie die Objektreferenz vor dem Senden in einem Objekt. Löschen Sie die Referenz, nachdem eine xhr-Anforderung abgeschlossen wurde.
So stornieren Sie alle Anfragen jederzeit:
Gibt die eindeutigen IDs der stornierten Anforderung zurück. Nur zu Testzwecken.
Arbeitsfunktion:
Gibt ein Objekt mit einer einzelnen Funktion zurück, mit dem bei Bedarf weitere Funktionen hinzugefügt werden können.
quelle
Ich fand es zu einfach für mehrere Anfragen.
Schritt 1: Definieren Sie eine Variable oben auf der Seite:
Schritt 2: set beforeSend in allen Ajax-Anfragen:
Schritt 3: Verwenden Sie es, wo immer Sie es benötigen:
quelle
Ich habe die Antwort von mkmurray und SpYk3HH oben erweitert, damit xhrPool.abortAll alle ausstehenden Anforderungen einer bestimmten URL abbrechen kann :
Die Verwendung ist dieselbe, außer dass abortAll jetzt optional eine URL als Parameter akzeptieren kann und nur ausstehende Aufrufe dieser URL abbricht
quelle
Ich hatte einige Probleme mit Andys Code, aber es gab mir einige großartige Ideen. Das erste Problem war, dass wir alle erfolgreich abgeschlossenen jqXHR-Objekte entfernen sollten. Ich musste auch die abortAll-Funktion ändern. Hier ist mein endgültiger Arbeitscode:
Die ajaxComplete () -Methode hat mir nicht gefallen. Egal wie ich versucht habe, .ajaxSetup zu konfigurieren, es hat nicht funktioniert.
quelle
Ich habe den Code aktualisiert, damit er für mich funktioniert
quelle
Werfen Sie meinen Hut in. Angebote
abort
undremove
Methoden gegen dasxhrPool
Array, und ist nicht anfällig für Probleme mitajaxSetup
Überschreibungen.quelle
Machen Sie einen Pool aller Ajax-Anfragen und brechen Sie sie ab .....
quelle
Besser unabhängigen Code verwenden .....
quelle
Genauso wichtig: Angenommen, Sie möchten sich abmelden und generieren neue Anforderungen mit Timern: Weil die Sitzungsdaten mit jedem neuen Bootstrap erneuert werden (vielleicht können Sie sagen, dass ich über Drupal spreche, aber dies kann jede Site sein, die Sitzungen verwendet). Ich musste alle meine Skripte mit einem Suchen und Ersetzen durchgehen, weil in verschiedenen Fällen eine Menge Dinge ausgeführt wurden: globale Variablen oben:
quelle
Wenn Sie die gesamte Ajax-Anfrage abbrechen möchten, müssen Sie nur diese Leitung anrufen
quelle
Es gibt eine Dummy-Lösung, mit der ich alle Ajax-Anfragen abbreche. Diese Lösung lädt die gesamte Seite neu. Diese Lösung ist gut, wenn Sie nicht jeder Ajax-Anforderung eine ID zuweisen möchten und wenn Sie Ajax-Anforderungen innerhalb der for-Schleife stellen. Dadurch wird sichergestellt, dass alle Ajax-Anforderungen beendet werden.
quelle
So schließen Sie dies bei jedem Klick an (nützlich, wenn Ihre Seite viele AJAX-Anrufe tätigt und Sie versuchen, weg zu navigieren).
quelle