Determinar se o erro $ .ajax é um tempo limite

205

Estou utilizando a magia de jQuery.ajax( settings ).

No entanto, eu estou querendo saber se alguém jogou com o tempo limite definindo muito?

Eu sei que é basicamente para determinar a hora local de uma solicitação, mas ela pode acionar alguma coisa se o tempo limite for atingido? Ou simplesmente para de ouvir uma resposta?

Lendo o site jQuery, posso ver que não há argumentos passados, por isso parece uma configuração simples com um recurso. O que é bom.

Mas, eu gostaria de acionar um alerta ou alguma função se o tempo limite for atingido. Percebo que a configuração do erro não é acionada, neste caso.

Aqui está o meu trecho:

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

});

Alguém sabe como trabalhar mais com o tempo limite?

coffeemonitor
fonte

Respostas:

356

Se o manipulador de eventos de erro aceitar os três argumentos (xmlhttprequest, status de texto e mensagem) quando ocorrer um tempo limite, o status arg será 'timeout'.

De acordo com a documentação do jQuery :

Os valores possíveis para o segundo argumento (além de nulo) são "timeout", "error", "notmodified" e "parsererror".

Você pode lidar com seu erro de acordo.

Eu criei esse violino que demonstra isso.

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

Com o jsFiddle, você pode testar chamadas ajax - ele aguardará 2 segundos antes de responder. Eu coloquei a configuração de tempo limite em 1 segundo, portanto, deve ocorrer um erro e transmitir um status de texto de 'tempo limite' ao manipulador de erros.

Espero que isto ajude!

David Hoerster
fonte
3
Que bom que funcionou! Sim, eles meio que escondem esses valores de status na documentação.
David Hoerster
102
Eles se escondem muito na documentação.
Aaron
4
O @JochemKuijpers Fiddler aguardará 2 segundos, e o tempo limite de 1 segundo será atingido. Leia ....
Rickjaah
2
Você pode explicar o que são x, t, m vars?
Bart
3
(x) mlhttprequest, (t) extstatus, e (m)
essage