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

194

Я использую магию 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); }
   });

});

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

Теги:
connection-timeout

1 ответ

324
Лучший ответ

Если ваш обработчик события ошибки принимает три аргумента (xmlhttprequest, textstatus и сообщение), когда происходит тайм-аут, статус arg будет "тайм-аутом".

В документация jQuery:

Возможные значения для второго аргумент (кроме нуля) - это "тайм-аут", "ошибка", "немодифицировано" и "Parsererror".

Таким образом, вы можете обрабатывать свою ошибку.

Я создал этот fiddle, который демонстрирует это.

$.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 вы можете проверить аякс-вызовы - он будет ждать 2 секунды, прежде чем отвечать. Я установил значение тайм-аута на 1 секунду, поэтому он должен выполнить ошибку и передать текстовый статус "timeout" обработчику ошибок.

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

  • 3
    Рад, что это сработало! Да, они как бы скрывают эти значения статуса в документации.
  • 97
    Они много прячутся в документации.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню