$.ajax({ url: "test.html", error: function(){ //do something }, success: function(){ //do something } });
A veces la función de success
funciona bien, a veces no.
¿Cómo configuro el tiempo de espera para esta solicitud de ajax? Por ejemplo, 3 segundos, si se agota el tiempo, muestra un error.
El problema es que la solicitud ajax congela el bloque hasta que finaliza. Si el servidor está inactivo por un tiempo, nunca terminará.
Lea la documentación de $.ajax
, este es un tema cubierto.
$.ajax({ url: "test.html", error: function(){ // will fire when timeout is reached }, success: function(){ //do something }, timeout: 3000 // sets timeout to 3 seconds });
Puede ver qué tipo de error se produjo accediendo al parámetro textStatus del error: function(jqXHR, textStatus, errorThrown)
. Las opciones son "tiempo de espera", "error", "abortar" y "error de análisis".
Aquí hay algunos ejemplos que demuestran cómo configurar y detectar tiempos de espera en los paradigmas antiguo y nuevo de jQuery.
Promesa con jQuery 1.8+
Promise.resolve( $.ajax({ url: '/getData', timeout:3000 //3 second timeout }) ).then(function(){ //do something }).catch(function(e) { if(e.statusText == 'timeout') { alert('Native Promise: Failed from timeout'); //do something. Try again perhaps? } });
jQuery 1.8+
$.ajax({ url: '/getData', timeout:3000 //3 second timeout }).done(function(){ //do something }).fail(function(jqXHR, textStatus){ if(textStatus === 'timeout') { alert('Failed from timeout'); //do something. Try again perhaps? } });
jQuery <= 1.7.2
$.ajax({ url: '/getData', error: function(jqXHR, textStatus){ if(textStatus === 'timeout') { alert('Failed from timeout'); //do something. Try again perhaps? } }, success: function(){ //do something }, timeout:3000 //3 second timeout });
Tenga en cuenta que el parámetro textStatus (o jqXHR.statusText ) le permitirá saber cuál fue el error. Esto puede ser útil si desea saber si la falla se debió a un tiempo de espera.
error (jqXHR, estado de texto, error lanzado)
Una función que se llamará si la solicitud falla. La función recibe tres argumentos: el objeto jqXHR (en jQuery 1.4.x, XMLHttpRequest), una cadena que describe el tipo de error que ocurrió y un objeto de excepción opcional, si ocurrió. Los valores posibles para el segundo argumento (además de nulo) son "timeout", "error", "abort" y "parsererror". Cuando se produce un error HTTP, errorThrown recibe la parte textual del estado HTTP, como "No encontrado" o "Error interno del servidor". A partir de jQuery 1.5, la configuración de errores puede aceptar una variedad de funciones. Cada función será llamada a su vez. Nota: Este controlador no se llama para secuencias de comandos entre dominios y solicitudes JSONP.
Puede usar la configuración de tiempo de timeout
en las opciones de ajax de esta manera:
$.ajax({ url: "test.html", timeout: 3000, error: function(){ //do something }, success: function(){ //do something } });
Lea todo sobre las opciones de ajax aquí: http://api.jquery.com/jQuery.ajax/
Recuerde que cuando se produce un tiempo de espera, se activa el controlador de error
y no el controlador de success
:)