Wie lange wartet der Browser nach einer Ajax-Anfrage?

68

Wie lange kann der Browser warten, bis ein Fehler angezeigt wird, bevor der Server auf die Anfrage antwortet? Kann diese Zeit unbegrenzt sein?

Taras Lukavyi
quelle
2
Sie sind sich nicht sicher, was Sie verwenden, aber Sie können das Timeout verlängern. Zu unendlich, ich weiß es nicht. Obwohl ich davon abraten würde, unbegrenzte Zeit zu tun. Wenn nötig, können Sie es jederzeit auf 90 Sekunden oder etwas länger einstellen. Wenn es jedoch länger als 30 Sekunden dauert, gibt es wahrscheinlich einen besseren und schnelleren Weg, etwas zu tun.
Matt
1
+1 - Ich bin auch neugierig darauf. Ich hatte den Verdacht, dass Sie sich Sorgen machen müssen, dass der Kunde auf Sie abläuft. Sie haben keine Kontrolle darüber. Eine Google-Suche ergab dies. Grundsätzlich heißt es, dass entweder der Server oder der Browser eine Zeitüberschreitung bei Ihnen verursachen können. Ich würde also etwas auswählen, das der Standard für alle Browser nicht überschreitet. support.microsoft.com/kb/813827
mrtsherman
Beim Debuggen ging ich nach dem Ajax-Anruf einmal zum Mittagessen und kehrte zum Browser zurück, der immer noch auf die Antwort wartete. Ich klickte auf Go in meinem Debugger und der Browser nahm die Antwort auf. Ich denke nicht, dass dies zählt, weil ich
Tin Can
Ich denke, er versucht, umgekehrten Ajax zu machen ...
André Puel
Mögliches Duplikat "Online-Chatroom basierend auf AJAX": stackoverflow.com/questions/1192375/…
Jeremy Thompson

Antworten:

79

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
        }
    }
});​
Tj Kellie
quelle
6
Festlegen des timeoutWerts, um 0das AJAX-Zeitlimit auf einen unbestimmten Zeitraum festzulegen (unbegrenzt lesen).
John
@UmaShankar Ich habe es mit dem gleichen Problem zu tun wie Sie. Haben Sie eine Lösung gefunden?
Youddh
14

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:

  • Wenn dies ein einfaches Skript mit langer Laufzeit ist und Sie auf Ergebnisse warten, ist dies nicht der richtige Weg. Sie sollten stattdessen das zuvor erwähnte Poster verwenden und die asynchrone Verarbeitung mit Serverabfrage für die Ergebnisse verwenden. Dies wäre eine viel sicherere Brandlösung . Beispiel: Ein Miniaturbildskript von einer Bildprozessorserverseite: Der Benutzer lädt ein Bild hoch, der Server gibt sofort eine 200 und eine "Job-ID" zurück. Der Client (Javascript ^^) kann dann die JobID verwenden, um den Jobstatus / das Jobergebnis anzufordern.
  • Wenn Sie eine Echtzeitverbindung zwischen Browser und Server herstellen möchten (Einwegverbindung, sobald die Anforderung vom Browser gestellt wurde, können keine weiteren Informationen mehr gesendet werden, ohne neue Anforderungen zu verwenden (ajax ^^)), wird dies als lange Abfrage bezeichnet / reverse ajax und kann für die Echtzeitkommunikation über http verwendet werden. Es gibt verschiedene Techniken, bei denen zwei lange abgefragte Anforderungen parallel verwendet werden, sodass nach einer Zeitüberschreitung eine zweite aktiv wird und die erste versucht, die Verbindung wiederherzustellen.
smassey
quelle
3

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.

Andy Davies
quelle
2

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.

ern0
quelle