Es scheint, dass der Erfolg, der Fehler und die vollständigen Rückrufe nur ausgelöst werden, wenn die Ajax-Anfrage eine Antwort vom Server erhalten kann.
Wenn ich also den Server herunterfahre, wird der folgende Fehlerrückruf nicht ausgeführt und die Anforderung schlägt automatisch fehl.
%Vor%Was ist der beste Weg, um einen Fehler zu melden, wenn der Server überhaupt nicht erreichbar ist.
Bearbeiten - Von dem, was ich versucht habe und gelesen habe, scheint es, dass jQuerys integrierte Fehlerbehandlung nicht mit JSONP oder dataType funktioniert: "script". Also werde ich versuchen, eine manuelle Zeitüberschreitung einzustellen.
Bearbeiten - Habe ein bisschen mehr recherchiert und es sieht so aus, als ob der Ajax Fehler Callback nicht funktioniert, aber man kann eine Ajax Anfrage nicht mit dataType Script oder jsonp abbrechen, und diese Anfragen ignorieren die Timeout Einstellung.
>Es gibt eine Alternative - das jquery-jsonp-Plugin, aber es verwendet versteckte iframes, die ich lieber vermeiden würde. Also habe ich mich darauf festgelegt, ein manuelles Timeout zu erstellen, wie unten vorgeschlagen. Sie können die Anforderung nicht abbrechen, wenn das Zeitlimit überschritten wird. Dies bedeutet, dass das Skript möglicherweise auch nach dem Zeitlimit noch geladen wird, aber zumindest wird etwas ausgelöst, wenn der Server nicht verfügbar ist.
Sie können eine setTimeout
verwenden und sie mit clearTimeout
im vollständigen Handler.
jQuery.ajax hat bereits eine timeout
Präferenz und sollte Ihren Fehlerhandler aufrufen, sollte die Anfrage eine Zeitüberschreitung haben. Schauen Sie sich die fantastische Dokumentation an , die besagt - ich würde es hier zitieren, meine Betonung:
timeoutNumber
Legen Sie eine lokale Zeitüberschreitung (in Millisekunden) für die Anforderung fest ...
und:
error (XMLHttpRequest, textStatus, errorThrown) Function
Eine Funktion, die aufgerufen wird, wenn die Anforderung fehlschlägt. Der Funktion werden drei Argumente übergeben: Das XMLHttpRequest-Objekt, eine Zeichenfolge, die den Typ des aufgetretenen Fehlers beschreibt, und ein optionales Ausnahmeobjekt, falls eines aufgetreten ist. Mögliche Werte für das zweite Argument (neben null) sind "timeout" , "error", "notmodified" und "parsererror". Dies ist ein Ajax-Ereignis.
Verwenden Sie readyState von XMLHttpRequest, um den Status der Ajax-Anfrage zu ermitteln. 'readyState' enthält den Status von XMLHttpRequest.