Wie lange kann der Browser warten, bis ein Fehler angezeigt wird, bevor der Server auf die Anfrage antwortet? Kann diese Zeit unbegrenzt sein?
Wie lange kann der Browser warten, bis ein Fehler angezeigt wird, bevor der Server auf die Anfrage antwortet? Kann diese Zeit unbegrenzt sein?
Antworten:
Wenn Sie einen jQuery $ .ajax-Aufruf verwenden, können Sie die timeout-Eigenschaft festlegen, um die Zeitspanne zu steuern, bevor eine Anforderung mit einem Timeout-Status zurückgegeben wird. Das Zeitlimit wird in Millisekunden festgelegt. Stellen Sie es einfach auf einen sehr hohen Wert ein. Sie können es auch für "unbegrenzt" auf 0 setzen, aber meiner Meinung nach sollten Sie stattdessen nur einen hohen Wert setzen.
Hinweis: Unbegrenzt ist eigentlich die Standardeinstellung, aber die meisten Browser haben Standardzeitlimits, die getroffen werden.
Wenn ein Ajax-Aufruf aufgrund eines Timeouts zurückgegeben wird, wird er mit dem Fehlerstatus "Timeout" zurückgegeben, den Sie bei Bedarf mit einem separaten Fall behandeln können.
Wenn Sie also eine Zeitüberschreitung von 3 Sekunden festlegen und die Zeitüberschreitung hier behandeln möchten, ist dies ein Beispiel:
$.ajax({
url: "/your_ajax_method/",
type: "GET",
dataType: "json",
timeout: 3000, //Set your timeout value in milliseconds or 0 for unlimited
success: function(response) { alert(response); },
error: function(jqXHR, textStatus, errorThrown) {
if(textStatus==="timeout") {
alert("Call has timed out"); //Handle the timeout
} else {
alert("Another error was returned"); //Handle other error type
}
}
});
timeout
Werts, um 0
das AJAX-Zeitlimit auf einen unbestimmten Zeitraum festzulegen (unbegrenzt lesen).
Ja und nein. Ja, der Server kann dies tun oder ist dafür konfiguriert. Nein, für die Browser (ich weiß nichts über Versions- / Distributorspezifikationen) sind möglicherweise Zeitüberschreitungen aktiviert.
Es gibt jedoch zwei Lösungen, um dies über HTTP zu erreichen / zu emulieren:
Können Sie etwas näher erläutern, was Sie erreichen möchten? Haben Sie einen lang laufenden Prozess auf einem Server, möchten Sie die Einstellungen nur auf einem lokalen Computer ändern oder möchten Sie ihn für große Mengen verwalten? von Benutzern?
Wie lange der Browser wartet, hängt von einer Reihe von Faktoren ab, z. B. wo das Timeout auftritt - auf TCP-Ebene, auf dem Server oder im lokalen Browser?
Wenn Sie einen lang laufenden Prozess auf einem Server haben und anschließend eine Webseite aktualisieren möchten, besteht die typische Vorgehensweise darin, den langen Prozess asynchron auszuführen und den Client zu benachrichtigen, wenn er abgeschlossen ist, z. B. einen Ajax-Aufruf, der den Server abfragt. oder verwenden Sie HTTP 1.1 und stellen Sie dem Client einen Benachrichtigungsstrom zur Verfügung.
In beiden Fällen kann die Verbindung weiterhin geschlossen werden, sodass der Client sie weiterhin öffnen muss.
Ich habe festgestellt, dass bei einer normalen Anfrage (HTML-Seite) die Browser nach cca eine Zeitüberschreitung aufweisen. 30 Sek. Es ist wichtig, weil andere Teilnehmer wahrscheinlich folgen: Proxies, Router (spielen Router in diesem Spiel? Ich bin nicht sicher). Ich verwende eine serverseitige Verzögerung von 4 Sekunden (wenn nichts an den Client gesendet werden muss), und mein AJAX-Client führt sofort eine weitere HTTP-Anforderung aus (ich bin im lokalen Netzwerk, es gibt keine Internetverzögerung). 4 Sekunden sind lang genug, um den Server und das Netzwerk nicht mit häufigen Abfragen zu überlasten, und sie sind kurz genug für den Fall, dass eine Umfrage aus der Zeile herausfällt, die der Client nicht erkennen und verarbeiten kann.
Es gibt auch andere Probleme mit dem Kometen (lange HTTP-Anforderung): Browser-Begrenzung der Anzahl gleichzeitiger HTTP-Anforderungen, Behandlung clientseitiger Ereignisse (muss sofort an den Server gesendet werden), Erkennung und Wiederherstellung von Server- / Netzwerkausfällen, Behandlung mehrerer Benutzer usw.