Ich habe Javascript JQuery-Code, der alle 5 Minuten einen Ajax-Aufruf an den Server ausführt. Er dient dazu, die Serversitzung am Leben zu erhalten und den Benutzer angemeldet zu halten. Ich verwende die $.ajax()
Methode in JQuery. Diese Funktion scheint eine 'error'-Eigenschaft zu haben, die ich für den Fall verwenden möchte, dass die Internetverbindung des Benutzers unterbrochen wird, sodass das KeepAlive-Skript weiterhin ausgeführt wird. Ich verwende den folgenden Code:
var keepAliveTimeout = 1000 * 10;
function keepSessionAlive()
{
$.ajax(
{
type: 'GET',
url: 'http://www.mywebapp.com/keepAlive',
success: function(data)
{
alert('Success');
setTimeout(function()
{
keepSessionAlive();
}, keepAliveTimeout);
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert('Failure');
setTimeout(function()
{
keepSessionAlive();
}, keepAliveTimeout);
}
});
}
Wenn ich es starte, wird alle 10 Sekunden in einem Warnfeld das Popup "Erfolg" auf dem Bildschirm angezeigt, was in Ordnung ist. Sobald ich jedoch das Netzwerkkabel abziehe, wird nichts angezeigt. Ich hatte erwartet, dass die Fehlerfunktion aufgerufen wird und eine Warnmeldung "Fehler" angezeigt wird, aber es passiert nichts.
Bin ich zu Recht davon ausgegangen, dass die Fehlerfunktion nur für Statuscodes gilt, die nicht vom Server zurückgegeben werden? Gibt es eine Möglichkeit, Netzwerkverbindungsprobleme beim Tätigen eines Ajax-Anrufs zu erkennen?
quelle
Antworten:
quelle
<form ... data-ajax-failure="YourMethod" ...></form>
und über Ihre Methodefunction YourMethod(XMLHttpRequest) { ..same code... }
XMLHttpRequest.readyState
Sie unter ajax_xmlhttprequest_response.aspSie sollten nur hinzufügen:
timeout: <number of miliseconds>,
irgendwo innerhalb$.ajax({})
. Auchcache: false,
könnte in einigen Szenarien helfen.$ .ajax ist gut dokumentiert . Sie sollten dort die Optionen überprüfen und möglicherweise etwas Nützliches finden.
Viel Glück!
quelle
Da ich das Problem nicht duplizieren kann, kann ich nur vorschlagen, es mit einer Zeitüberschreitung beim Ajax-Aufruf zu versuchen. In jQuery können Sie es mit $ .ajaxSetup festlegen (und es ist global für alle Ihre $ .ajax-Aufrufe) oder Sie können es speziell für Ihren Anruf wie folgt festlegen:
JQuery registriert bei Ihrem Anruf eine Zeitüberschreitung von 15 Sekunden. Danach führt jQuery ohne einen http-Antwortcode vom Server den Fehlerrückruf aus, wobei der textStatus-Wert auf "timeout" gesetzt ist. Auf diese Weise können Sie zumindest den Ajax-Anruf beenden, aber Sie können die tatsächlichen Netzwerkprobleme nicht vom Verbindungsverlust unterscheiden.
quelle
In diesem Fall sehe ich, dass, wenn ich am Netzwerkkabel des Clientcomputers ziehe und den Anruf tätige, der Ajax Success Handler aufgerufen wird (warum, ich weiß nicht) und der Datenparameter eine leere Zeichenfolge ist. Wenn Sie also die tatsächliche Fehlerbehandlung herausrechnen, können Sie Folgendes tun:
quelle
Wenn Sie domänenübergreifend arbeiten, rufen Sie Use Jsonp an. Andernfalls wird der Fehler nicht zurückgegeben.
quelle
VERWENDEN
(mehr Code unten - BILD-BEISPIEL HOCHLADEN)
quelle
Folgendes habe ich getan, um den Benutzer zu benachrichtigen, falls sein Netzwerk ausfällt oder die Seitenaktualisierung fehlschlägt:
Ich habe ein Div-Tag auf der Seite, auf der ich die aktuelle Zeit eingebe und dieses Tag alle 10 Sekunden aktualisiere. Es sieht ungefähr so aus:
<div id="reloadthis">22:09:10</div>
Am Ende der Javascript-Funktion, die die Zeit im div-Tag aktualisiert, habe ich Folgendes eingefügt (nachdem die Zeit mit AJAX aktualisiert wurde):
Das ist es! Sie können den Alarmteil natürlich durch alles ersetzen, was Sie wollen. Hoffe das hilft.
quelle
Hast du das versucht?
Das sollte alle AjaxErrors behandeln. Ich habe es hier gefunden . Dort finden Sie auch die Möglichkeit, diese Fehler in Ihre Firebug-Konsole zu schreiben.
quelle