Oto kilka przykładów demonstrujących ustawienie i wykrywanie przekroczeń limitu czasu w starych i nowych paradygmatach jQuery.
Live Demo
Promesa 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
});
Zauważ, że textStatus param (lub jqXHR.statusText) pozwoli Ci wiedzieć, co było błędem. Może to być przydatne, jeśli chcesz wiedzieć, że błąd spowodowany był przekroczeniem limitu czasu.
błąd (jqXHR, textStatus, errorThrown)
Funkcja nazywać jeżeli żądanie zawiedzie. Funkcja otrzymuje trzy argumenty: Obiekt jqXHR (w jQuery 1.4.x, XMLHttpRequest), ciąg znaków opisujący typ błędu , który wystąpił, oraz opcjonalny obiekt wyjątku, jeśli wystąpił. Możliwe wartości drugiego argumentu (oprócz wartości null) to "timeout", "error", "abort" i "parsererror". Gdy wystąpi błąd HTTP, errorThrown otrzymuje tekstową część statusu HTTP, na przykład "Not Found" lub "Internal Server Error." Od wersji jQuery 1.5 ustawienie błędu może akceptować szereg funkcji. Każda funkcja będzie się nazywać po kolei . Uwaga: Ten moduł obsługi nie jest wywoływany w przypadku skryptów międzydomenowych i żądań JSONP .
src: http://api.jquery.com/jQuery.ajax/
trzeba '' tam po ''}. – pimvdb
Spójrz na to> http://stackoverflow.com/questions/12930759/how-to-call-a-jquery-function-onload-with-some-delay/12930892#12930892 –
możliwy duplikat [jQuery $ .ajax ustawienia limitu czasu] (http://stackoverflow.com/questions/3543683/jquery-ajax-timeout-setting) – nathanchere