Как увеличить timeout у ajax в jQuery

Как увеличить timeout у ajax в jQuery?

· jQuery и Снипеты · 2 мин чтения

Чтобы увеличить время ожидания 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» (не найдено), то есть файла не существует.

Источники