2010-08-22 12 views
186

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

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

Sé que es básicamente para dictar la hora local para una solicitud, pero ¿puede desencadenar 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 han pasado los 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. Veo que la configuración del error no se activa, en este caso.

Aquí es 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 con más tiempo de espera?

Respuesta

325

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

por la jQuery documentation:

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

En consecuencia, puede manejar su error.

Creé este fiddle 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. Pongo la configuración de tiempo de espera en 1 segundo, por lo que debería salir el error y devolver un estado de texto de 'timeout' al manejador de errores.

Espero que esto ayude!

+2

¡Me alegro de que funcionó! Sí, ocultan esos valores de estado en la documentación. –

+93

Se esconden mucho en la documentación. – Aaron

+0

¿Por qué 2 segundos? Su ejemplo muestra claramente 1000 (ms) –

Cuestiones relacionadas