Установить тайм-аут для ajax (jQuery)
$.ajax({
url: "test.html",
error: function(){
//do something
},
success: function(){
//do something
}
});
иногда
4 ответов
пожалуйста, читайте $.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 . Параметры: "timeout", "error", "abort"и " parsererror".
вот некоторые примеры, которые демонстрируют, установка и обнаружение тайм-ауты в старом в jQuery и новые paradigmes.
обещание с 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
});
заметил, что textStatus param (или jqXHR.statustext также) позволит вам знайте, в чем была ошибка. Это может быть полезно, если вы хотите знать, что сбой был вызван таймаутом.
ошибка(jqXHR, textStatus, errorThrown)
функция, вызываемая, если запрос не выполняется. Функция получает три аргумента: jqXHR (в jQuery 1.4.X, XMLHttpRequest) объект, строка, описывающая тип произошла ошибка и необязательный объект исключения, если таковой произошел. Возможные значения для второго аргумент (кроме null) - " timeout", "ошибка", "отмена" и "parsererror". При возникновении ошибки HTTP , errorThrown получает текстовую часть состояния HTTP, например "Не найдено "или" внутренняя ошибка сервера."По состоянию на jQuery 1.5, ошибка настройка может принимать массив функций. Каждая функция будет вызываться попеременно. Примечание: этот обработчик не вызывается для междоменного сценария и Запросов JSONP в.
можно использовать 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/a/3543713/1689451 для примера.
без тестирования просто объедините свой код с указанным вопросом 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);
}
}
});