Визначте, чи помилка $ .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, textstatus і повідомлення), коли відбувається час очікування, аргумент стану буде "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
Радий, що це спрацювало! Так, вони сховають ці значення статусу в документації.
David Hoerster

102
Вони багато ховають у документації.
Аарон

4
@JochemKuijpers Fiddler чекатиме 2 секунди, тож час очікується на 1 секунду. Читайте ....
Rickjaah

2
Чи можете ви пояснити, що таке x, t, m vars?
барт

3
(x) mlhttprequest, (t) extstatus та (m)
essage
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.