Чтобы увеличить время ожидания ajax запроса в jQuery нужно использовать параметр timeout. В этой небольшой записи я покажу как его правильно использовать.
Для примера возьмем код ниже:
$.ajax({ url: "test.php", // куда отправляем запрос error: function(){ // будет вызвана в случае если пройдет 3 секунды, но ответа так и не было }, success: function(){ // что-то делаем тут }, timeout: 3000 // установка 3-х секундного тайм-аута });
Последний параметр (timeout) — это как раз то, что нам нужно. Параметр принимает аргумент в формате милисекунд. Если вы хотите поставить 8 секунд, то вам нужно написать 8000. В примере выше, ajax запрос ожидает ответа в течении 3 секунд и если его нет, то error: function()
будет вызвана.
Как определить timeout внутри error: function()?
Для того, чтобы поймать timeout
ошибку внутри error: function()
нужно прописать дополнительные аргументы (смотрите ниже).
$.ajax({ url: "test.php", // куда отправляем запрос error: function(x, t, e){ if( t === 'timeout') { // Произошел тайм-аут } else { console.log('Ошибка: ' + e); } }, success: function(){ // Что-то сделать нужно в случае успеха }, timeout: 3000 // установка 3-х секундного тайм-аута });
Строки 3-9 — это то, что я изменил в коде. В данном случае мы добавили три аргументы для функции error: function()
— x
, t
и e
.
x
означает jqXHR аргумент, который помогает определить какого типа произошла ошибка во время запроса.
t
означает textStatus аргумент, который отображает ответ в виде текстового значения. На строке 4, мы проверяем t == 'timeout'
или нет, если да, то это означает, что произошел тайм-аут запроса. Данный аргумент может так же проверять на следующие значения: «timeout», «error», «abort», или «parsererror». Так же возможно, что вам просто вернет «null».
e
означает errorThrown аргумент, который помогает определить HTTP ошибки. Например, если вы делали запрос к файлу, а его нет, то должно вернуться «Not Found» (не найдено), то есть файла не существует.