JavaScript jQuery jxhr.abort() handler?

mercsen

Lt. Commander
Registriert
Apr. 2010
Beiträge
1.681
Moinsän.

nachdem ich jetzt ausgiebig gesucht habe und einfach keine vernünftige lösung finden konnte wollte ich fragen ob jemand vlt. sicher die antwort weiß.

wenn ich einen ajax request abbreche, den ich mit jQuery gestartet habe, ruft er leider immer den verdammten error handler auf. Das ist aber nicht das verhalten, welches in benötige.

Ich brauche eine methode wie ich zwischen einen abbruch und einem Fehler im request unterscheiden kann.

Mein Ziel ist das folgende: Eine Seite stellt links zur verfügung die geladen werden per jQuery. Dabei werden scripts aufgerufen die Teilweise einige Seit benötigen um vom Server abgearbeitet zu werden da wirklich enorme Datenmengen verarbeitet werden. Soltle der User sich jetzt während des Ladens umentscheiden und auf einen anderen Link klicken soll der alte Request abgebrochen und ein neuer gestartet werden.

Soweit klappt es auch alles, bis auf die Tatsache das er bei dem abort befehl zuerst den error handler aufruft und dann die neue Seite lädt. Sprich: Ich bekomme kurzzeitig die Fehlermeldung angezeigt......

edit: jetzt ist mir gerade doch eine lösung eingefallen.......
ich prüfe einfach vorher ob der request nich läuft, falls ja breche ich ihn ab und speichere mir das ein abbruch und kein Fehler erfolgte und lasse den Error handler einfach nichts tun. Sorry!! Das einfachste sieht man wie so oft nicht ~_~

trotzdem würde es mich interessieren ob es da nicht geschicktere workarounds gibt
 
Zuletzt bearbeitet:
Wenn der "Request" abgegeben wurde, wird doch sowieso die enorme Datenmenge von anderen Server benötigt, da dieser vermutlich über eine serverseitige Skriptsprache Daten auswertet? Unabhängig davon, ob der Klient es noch sehen wird oder nicht.

D.h. du willst eigentlich nur den Rückgabewert unterbinden bzw. nicht mehr drauf warten?
 
ja richtig. zwar blöd das ich den server nicht mehr beenden kann, aber es macht auch wenig sinn auf die daten zu warten wenn schon wieder ein anderer link geladen werden kann.

mir ging es nur darum dem ajax objekt direkt einen handler für die abort() funktio zu übergeben, da er in dem fall von einem error ausgeht und den error handler ausführt.

aber der trick, in einem objekt zu speichern das abgebrochen wurde und im error handler darauf zu testen kalppt wunderbar. Ich emfpange dann auch keine weiteren daten mehr vom server, auch wenn der die vermutlich noch rausschickt.
 
Könntest du dein Tipp als Lösung schreiben? Für Benutzer, die das selbe Problem haben und hier mal landen (Google etc.) :)
 
Zuletzt bearbeitet:
err bissl kompliziert, da ich das jQuery Framework massiv meinen bedrüfnissen angepasst habe.
Aber ich kann ja mal eine kurze abänderung schreiben

Code:
var requestAbort = false;
var xhr = $.ajax();

function loadAjax(url) {
	if(xhr.readyState < 4) {
		// Flag setzen das wir abbrechen
		requestAbort = true;
		// Rquest abbrechen und error handler aufrufen
		xhr.abort();
		// Flag zurück setzen
		requestAbort = false;
	}
	xhr = $.ajax({
			url: url,
			type: "get",
			success: function () { /* do some stuff here */ },
			error: function() { 
					// Wenn ein normaler Fehler auftritt 
					// und kein erzwungenes abort() aufgerufen wurde
					// führe die funktion aus
					if(!requestAbort) {
						// Error handling here
					}
		});
}

habe es nicht getestet aber so in etwa siehts aus.

Entscheidend ist nur das man eine Globale Variable, bzw. ein Objekt hat das speichert ob wir den request abbrechen oder nicht und der error Handler darauf regieren kann.
 
Zurück
Oben