Wie kann ich mit jQuery eine Ajax-Anfrage abbrechen, von der ich noch keine Antwort erhalten habe?
Die meisten jQuery-Ajax-Methoden geben ein XMLHttpRequest-Objekt (oder ein entsprechendes Objekt) zurück, so dass Sie einfach abort()
verwenden können.
Siehe die Dokumentation:
var xhr = $.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
//kill the request
xhr.abort()
UPDATE: Ab jQuery 1.5 ist das zurückgegebene Objekt ein Wrapper für das native XMLHttpRequest-Objekt namens jqXHR. Dieses Objekt scheint alle nativen Eigenschaften und Methoden zur Verfügung zu stellen, so dass das obige Beispiel weiterhin funktioniert. Siehe Das jqXHR-Objekt (jQuery-API-Dokumentation).
UPDATE 2:
Ab jQuery 3 gibt die ajax-Methode nun ein Versprechen mit zusätzlichen Methoden (wie abort) zurück, so dass der obige Code immer noch funktioniert, obwohl das zurückgegebene Objekt kein xhr
mehr ist. Siehe den 3.0 Blog hier.
UPDATE 3: xhr.abort()
funktioniert immer noch mit jQuery 3.x. Gehen Sie nicht davon aus, dass das Update 2 korrekt ist. Mehr Infos auf jQuery Github Repository.
Sie können die Anfrage nicht zurückrufen, aber Sie können einen Timeout-Wert festlegen, nach dem die Antwort ignoriert wird. Siehe diese Seite für jquery AJAX-Optionen. Ich glaube, dass Ihr Fehler-Callback aufgerufen wird, wenn die Timeout-Zeit überschritten wird. Es gibt bereits ein Standard-Timeout für jede AJAX-Anfrage.
Sie können auch die Methode abort() für das Request-Objekt verwenden, aber das wird zwar dazu führen, dass der Client nicht mehr auf das Ereignis wartet, aber es wird den Server wahrscheinlich nicht davon abhalten, es zu verarbeiten.
Es handelt sich um eine asynchrone Anfrage, das heißt, sobald sie gesendet wurde, ist sie draußen.
Für den Fall, dass Ihr Server aufgrund der AJAX-Anfrage eine sehr teure Operation startet, ist das Beste, was Sie tun können, Ihren Server so zu öffnen, dass er auf Abbruchanfragen hört, und eine separate AJAX-Anfrage zu senden, die den Server benachrichtigt, mit dem, was er tut, aufzuhören.
Andernfalls ignorieren Sie einfach die AJAX-Antwort.