Determine si el error $ .ajax es un tiempo de espera

205

Estoy utilizando la magia de jQuery.ajax( settings ).

Sin embargo, me pregunto si alguien ha jugado mucho con el tiempo de espera.

Sé que es básicamente para dictar la hora local para una solicitud, pero ¿puede activar algo si se alcanza el tiempo de espera? ¿O simplemente deja de escuchar una respuesta?

Al leer el sitio jQuery, puedo ver que no se pasan argumentos, por lo que parece una configuración simple con una capacidad. Lo cual está bien.

Pero me gustaría activar una alerta o alguna función si se alcanza el tiempo de espera. Puedo ver que la configuración de error no se activa, en este caso.

Aquí está mi fragmento:

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

});

¿Alguien sabe cómo trabajar más con tiempo de espera?

monitor de café
fuente

Respuestas:

356

Si su controlador de eventos de error toma los tres argumentos (xmlhttprequest, textstatus y message) cuando ocurre un tiempo de espera, el argumento de estado será 'tiempo de espera'.

Según la documentación de jQuery :

Los valores posibles para el segundo argumento (además de nulo) son "timeout", "error", "notmodified" y "parsererror".

Puede manejar su error en consecuencia, entonces.

Creé este violín que demuestra esto.

$.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, puede probar las llamadas ajax: esperará 2 segundos antes de responder. Puse la configuración de tiempo de espera en 1 segundo, por lo que debería fallar y devolver un estado de texto de 'tiempo de espera' al controlador de errores.

¡Espero que esto ayude!

David Hoerster
fuente
3
Me alegro de que funcionó! Sí, ocultan esos valores de estado en la documentación.
David Hoerster
102
Se esconden mucho en la documentación.
Aaron
44
@JochemKuijpers Fiddler esperará 2 segundos, por lo que se cumple el tiempo de espera de 1 segundo. Leer ....
Rickjaah
2
¿Puedes explicar cuáles son las variables x, t, m?
Bart
3
(x) mlhttprequest, (t) extstatus y (m) essage
JupiterP5