jQuery ajax txtStat не возвращает «тайм-аут», но «ошибка» - PullRequest
1 голос
/ 15 марта 2012
Netbean 6.9.1
GlassFish 3.0.1
jQuery 1.6.2

Я тестирую свое веб-приложение на время ожидания.

Мое понимание термина "тайм-аут" заключается в том, что при отправке Ajax-запроса и если это занимает определенное количество времени (например, 30 секунд), запускается функция обратного вызова тайм-аута.

Я тоже прочитал JQuery Timeout:

timeoutNumber

Установить время ожидания (в миллисекундах) для запроса. Это переопределит любое глобальное время ожидания, установленное с помощью $ .ajaxSetup (). Период ожидания начинается с момента выполнения вызова $ .ajax; если выполняется несколько других запросов, и в браузере нет доступных подключений, запрос может истечь до истечения времени ожидания. В jQuery 1.4.x и ниже объект XMLHttpRequest будет в недопустимом состоянии, если время ожидания истекло; доступ к любым членам объекта может вызвать исключение. Только в Firefox 3.0+ запросы на скрипты и JSONP не могут быть отменены тайм-аутом; скрипт будет работать, даже если он прибудет после периода ожидания.

Но пока я тестирую тайм-аут, вызывается функция ошибки, и txtStat показывает «ошибку», когда она должна быть «тайм-аут». Вот мой тестовый шаг:

Шаг теста:

  1. Запустить сервер Glassfish
  2. Перейти на тестовую страницу (foo.jsp)
  3. Стоп сервер Glassfish
  4. нажмите на кнопку на foo.jsp, чтобы отправить запрос ajax.

Ожидаемый результат:

Запрос Ajax отправляется, но не удается связаться с сервером, вызывается функция обратного вызова с ошибкой и ее аргумент: txtStat должен иметь значение «timeout».

Фактический результат:

Вызывается функция обратного вызова error и ее аргумент: txtStat имеет значение "error"

Так это ожидаемое поведение или мое понимание таймаута неверно?

Мой код Ajax:

$.ajax({
        url: "../resources/plan/list/some",
        type: "get",
        dataType: "json",
        timeout: 30000,
        success: function(data, txtStat, xhr) {
            console.log("success")
        },
        error: function(xhr, txtStat, errThrown) {
            if(txtStat === "timeout") {
                console.log("timeout");
            }
            else { //txtStat === "error", "abort", "parseerror"
                console.log(txtStat);
            }
        },
        complete: function(xhr, txtStat) {
            console.log("completed");
        }
    });

1 Ответ

4 голосов
/ 15 марта 2012

Действительно, ваше понимание тайм-аута запроса не совсем верно.Тайм-аут возникает, когда запрос занимает больше определенного времени, но когда сервер не работает, вы обнаружите, что ответ возвращается немедленно.Попробуйте перейти на страницу своего веб-приложения, пока оно не запущено, просто в браузере.Например:

enter image description here

Он завершается немедленно, поскольку браузер не может даже подключиться.

Чтобы вызвать состояние тайм-аута, сохранитеваш сервер работает, но запрашивает страницу, которая делает что-то вроде Thread.sleep(60000) - сервер примет запрос, но не отправит ответ до истечения настроенного времени ajax.

Это является тайм-аутом: когда запрос принят, но ответ не отправлен вовремя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...