$.ajax({
url: "test.html",
error: function(){
//do something
},
success: function(){
//do something
}
});
Иногда функция success
работает хорошо, иногда нет.
Как установить таймаут для этого запроса ajax? В примере, 3 секунды, если время отсутствует, затем покажите ошибку.
Проблема заключается в том, что запрос ajax блокирует блок до завершения. Если сервер не работает в течение короткого времени, он никогда не закончится.
Прочтите $.ajax
документацию, это охваченная тема.
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
//do something
},
timeout: 3000 // sets timeout to 3 seconds
});
Вы можете увидеть, какой тип ошибки был сброшен, обратившись к параметру textStatus параметра error: function(jqXHR, textStatus, errorThrown)
. Возможные значения: "тайм-аут", "ошибка", "прервать" и "parsererror".
Вот несколько примеров, демонстрирующих установку и обнаружение тайм-аутов в старых и новых парадигмах jQuery.
Обещать с помощью 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
});
Обратите внимание, что параметр textStatus (или jqXHR.statusText) позволит вам узнать, что произошло. Это может быть полезно, если вы хотите знать, что отказ был вызван таймаутом.
ошибка (jqXHR, textStatus, errorThrown)
Функция, вызываемая, если запрос не выполняется. Функция получает три аргумента: jqXHR (в jQuery 1.4.x, XMLHttpRequest), строка, описывающая тип произошла ошибка и дополнительный объект исключения, если он произошел. Возможные значения для второго аргумента (кроме нуля) - это "тайм-аут", "error", "abort" и "parsererror". Когда возникает ошибка HTTP, errorThrown получает текстовую часть статуса HTTP, например "Не найдено" или "Внутренняя ошибка сервера". Начиная с jQuery 1.5, ошибка настройка может принимать множество функций. Каждая функция будет называться в очереди. Примечание. Этот обработчик не вызывается для междоменного script и Запросы JSONP.
$.ajax().fail()
и $.ajax().error()
?
Вы можете использовать параметр timeout
в параметрах ajax, например:
$.ajax({
url: "test.html",
timeout: 3000,
error: function(){
//do something
},
success: function(){
//do something
}
});
Читайте все о параметрах ajax здесь: http://api.jquery.com/jQuery.ajax/
Помните, что когда происходит тайм-аут, обработчик error
запускается, а не обработчик success
:)
используйте полнофункциональную функцию .ajax
jQuery.
сравните с https://stackoverflow.com/questions/3543683/determine-if-ajax-error-is-a-timeout для примера.
без тестирования, просто слияние вашего кода с указанным вопросом SO:
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);
}
}
});
,
там после}
.