Stellen Sie fest, ob der Fehler $ .ajax eine Zeitüberschreitung ist

205

Ich nutze die Magie von jQuery.ajax( settings ).

Ich frage mich jedoch, ob jemand viel mit der Timeout-Einstellung gespielt hat.

Ich weiß, dass es im Grunde genommen darum geht, die Ortszeit für eine Anfrage zu diktieren, aber kann es irgendetwas auslösen, wenn das Zeitlimit erreicht ist? Oder hört es einfach auf, auf eine Antwort zu hören?

Beim Lesen der jQuery-Site kann ich feststellen, dass keine Argumente übergeben wurden. Es scheint also eine einfache Einstellung mit einer Funktion zu sein. Welches ist in Ordnung.

Ich möchte jedoch eine Warnung oder eine Funktion auslösen, wenn das Zeitlimit erreicht ist. Ich kann sehen, dass die Fehlereinstellung in diesem Fall nicht ausgelöst wird.

Hier ist mein Ausschnitt:

$("form#testform").submit(function(){ 

 var allFormValues = $("form#testform").serialize(); 

   $.ajax({
    cache:false,
    timeout:8000,  // I chose 8 secs for kicks
    type:"POST",
    url:"someurl.php",
    data:allFormValues,
    error:function(){ alert("some error occurred") },
    success:function(response){ alert(response); }
   });

});

Weiß jemand, wie man mehr mit Timeout arbeitet?

Kaffeemonitor
quelle

Antworten:

356

Wenn Ihr Fehlerereignishandler die drei Argumente (xmlhttprequest, textstatus und message) verwendet, wenn eine Zeitüberschreitung auftritt, lautet das Statusargument "Zeitüberschreitung".

Gemäß der jQuery-Dokumentation :

Mögliche Werte für das zweite Argument (neben null) sind "timeout", "error", "notmodified" und "parsererror".

Sie können Ihren Fehler dann entsprechend behandeln.

Ich habe diese Geige geschaffen, die dies demonstriert.

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
    }
});​

Mit jsFiddle können Sie Ajax-Anrufe testen - es dauert 2 Sekunden, bis Sie antworten. Ich habe die Timeout-Einstellung auf 1 Sekunde gesetzt, daher sollte ein Fehler auftreten und der Textstatus "Timeout" an den Fehlerbehandler zurückgegeben werden.

Hoffe das hilft!

David Hoerster
quelle
3
Ich bin froh, dass es funktioniert hat! Ja, sie verbergen diese Statuswerte in der Dokumentation.
David Hoerster
102
Sie verstecken sich viel in der Dokumentation.
Aaron
4
@JochemKuijpers Fiddler wartet 2 Sekunden, sodass das Timeout von 1 Sekunde erreicht ist. Lesen Sie ....
Rickjaah
2
Können Sie erklären, was die x, t, m vars sind?
Bart
3
(x) mlhttprequest, (t) extstatus und (m) essage
JupiterP5