Определите, является ли ошибка $ .ajax тайм-аутом


205

Я использую магию jQuery.ajax( settings ) .

Однако мне интересно, много ли кто-нибудь играл с настройкой тайм-аута?

Я знаю, что это в основном диктует местное время для запроса, но может ли он вызвать что-нибудь, если тайм-аут достигнут? Или это просто перестает слушать ответ?

Читая сайт jQuery, я вижу, что аргументы не передаются, поэтому кажется, что это простая настройка с одной возможностью. Что хорошо.

Но я хотел бы вызвать предупреждение или какую-либо функцию, если время ожидания истекло. Я вижу, что установка ошибки не срабатывает, в этом случае.

Вот мой фрагмент:

$("form#testform").submit(function(){ 

 var allFormValues = $("form#testform").serialize(); 

   $.ajax({
    cache:false,
    timeout:8000,  // I chose 8 secs for kicks
    type:"POST",
    url:"someurl.php",
    data:allFormValues,
    error:function(){ alert("some error occurred") },
    success:function(response){ alert(response); }
   });

});

Кто-нибудь знает, как больше работать с таймаутом?

Ответы:


356

Если ваш обработчик события ошибки принимает три аргумента (xmlhttprequest, texttatus и message), когда происходит тайм-аут, аргументом состояния будет «timeout».

Согласно документации jQuery :

Возможные значения для второго аргумента (кроме нуля): «timeout», «error», «notmodified» и «parsererror».

Вы можете обработать свою ошибку соответственно.

Я создал эту скрипку, которая демонстрирует это.

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
    }
});​

С jsFiddle вы можете тестировать вызовы ajax - он будет ждать 2 секунды, прежде чем ответить. Я установил тайм-аут на 1 секунду, поэтому он должен выдать ошибку и передать текстовое состояние «timeout» в обработчик ошибок.

Надеюсь это поможет!


3
Рад, что это сработало! Да, они как бы скрывают эти значения статуса в документации.
Дэвид Хёрстер

102
Они многое скрывают в документации.
Аарон

4
@JochemKuijpers Fiddler будет ждать 2 секунды, поэтому время ожидания составляет 1 секунду. Читайте ....
Рикджа

2
Можете ли вы объяснить, что такое x, t, m?
Барт

3
(x) mlhttprequest, (t) extstatus и (m) essage
JupiterP5
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.