Establecer tiempo de espera para ajax (jQuery)
$.ajax({
url: "test.html",
error: function(){
//do something
},
success: function(){
//do something
}
});
A veces success
la función funciona bien, a veces no.
¿Cómo establezco el tiempo de espera para esta solicitud ajax? En el ejemplo, 3 segundos, si se agota el tiempo, muestra un error.
El problema es que la petición ajax congela el bloque hasta que termina. Si el servidor está apagado por un poco de tiempo, nunca terminará.
4 answers
Por favor, lea el $.ajax
documentación, 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 de la opción error: function(jqXHR, textStatus, errorThrown)
. Las opciones son" timeout"," error"," abort "y"parsererror".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-07 21:53:24
Aquí hay algunos ejemplos que demuestran establecer y detectar tiempos de espera en los viejos y nuevos paradigmas de jQuery.
Promise 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
$.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
});
Observe que el textStatus param (o jqXHR.statusText) le permitirá saber cuál fue el error. Esto puede ser útil si desea saber que el fallo fue causado por un tiempo de espera.
Error (jqXHR, textStatus, errorThrown)
Una función a ser llamada si el la solicitud falla. La función recibe tres argumentos: El jqXHR (en jQuery 1.4.x, XMLHttpRequest), una cadena que describe el tipo de error que se produjo y un objeto de excepción opcional, si se produjo uno. Los valores posibles para el segundo argumento (además de null) son " timeout", "error", "abort", y "parsererror". Cuando se produce un error HTTP, errorThrown recibe la porción textual del estado HTTP, como "No Encontrado" o " Error Interno del Servidor."A partir de jQuery 1.5, el error la configuración puede aceptar una matriz de funciones. Cada función será llamada a su vez. Nota: Este manejador no es llamado para script entre dominios y Peticiones JSONP.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-27 14:13:37
Puedes usar la configuración timeout
en las opciones de ajax así:
$.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 error
y no el controlador success
:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-07 21:42:50
Utilice la función completa de jQuery .ajax
.
comparar con https://stackoverflow.com/a/3543713/1689451, por ejemplo.
Sin probar, simplemente fusiona tu código con la pregunta SO referenciada:
target = $(this).attr('data-target');
$.ajax({
url: $(this).attr('href'),
type: "GET",
timeout: 2000,
success: function(response) { $(target).modal({
show: true
}); },
error: function(x, t, m) {
if(t==="timeout") {
alert("got timeout");
} else {
alert(t);
}
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:58