Determina se l'errore $ .ajax è un timeout


205

Sto usando la magia di jQuery.ajax( settings ).

Tuttavia, mi chiedo se qualcuno abbia giocato molto con l'impostazione del timeout?

So che è fondamentalmente per dettare l'ora locale per una richiesta, ma può innescare qualcosa se viene raggiunto il timeout? O smette semplicemente di ascoltare una risposta?

Leggendo il sito jQuery, vedo che non ci sono argomenti passati, quindi sembra una semplice impostazione con una capacità. Va bene

Tuttavia, vorrei attivare un avviso o alcune funzioni se viene raggiunto il timeout. Vedo che l'impostazione dell'errore non viene attivata, in questo caso.

Ecco il mio frammento:

$("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); }
   });

});

Qualcuno sa come lavorare di più con il timeout?

Risposte:


356

Se il gestore di eventi di errore accetta i tre argomenti (xmlhttprequest, texttatus e message) quando si verifica un timeout, lo stato arg sarà "timeout".

Secondo la documentazione di jQuery :

I valori possibili per il secondo argomento (oltre a null) sono "timeout", "errore", "non modificato" e "parsererror".

Quindi puoi gestire il tuo errore di conseguenza.

Ho creato questo violino che lo dimostra.

$.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);
        }
    }
});​

Con jsFiddle, è possibile testare le chiamate Ajax: attenderà 2 secondi prima di rispondere. Metto l'impostazione del timeout a 1 secondo, quindi dovrebbe fuoriuscire e restituire uno stato di "timeout" al gestore degli errori.

Spero che questo ti aiuti!


3
Sono contento che abbia funzionato! Sì, nascondono quei valori di stato nella documentazione.
David Hoerster,

102
Si nascondono molto nella documentazione.
Aaron,

4
@JochemKuijpers Fiddler attenderà 2 secondi, quindi viene rispettato il timeout di 1 secondo. Leggi ....
Rickjaah,

2
Puoi spiegare cosa sono le x, t, m vars?
Bart

3
(x) mlhttprequest, (t) extstatus e (m) essage
JupiterP5
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.