Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Сколько времени ajax запрос ждет ответа от сервера?

#java #jquery #ajax


Сколько времени .ajax метод ждет ответ? В моем примере он обращается к сервлету,
и если в сервлете перед отправкой ответа добавить хотя бы секунду Thread.sleep(), то
вызывается обработчик ошибки error, если его убрать, то ответ обрабатывается корректно.
Просто в более сложном примере, когда сервлет уже в свою очередь к серверу обращается,
что тоже занимает время, ответ опять-таки не приходит. Если вообще понятие времени
ожидания запросом ответа?

Вот код ajax запроса

$(document).ready(function () {
        $("#login-button").click(function () {
            var userPassword = $("input#userPassword").val();
            var userLogin = $("input#userLogin").val();
            $.ajax({
                type: "POST",
                url: "login",
                dataType: "text",
                data: {login: userLogin, password: userPassword},
                success: function (data) {
                    alert("Successful request! Data is " + data.toString());
                },
                error: function (jqXHR) {
                    console.log(jqXHR);
                }
            });
        });
    });


Метод service в сервлете

@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    // Даже если на секунду включить, ответ не проходит
    /*try {
        Thread.sleep(1000);
    } catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
    }*/


    response.setContentType("text/plain");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().print("test");

}

    


Ответы

Ответ 1



Для начала стоит убедиться, что возврат ajax-запроса происходит из-за нехватки времени - для этого проверяем статус ответа: error: function(jqXHR, status, e) { if (status === "timeout") { alert("Время ожидания ответа истекло!"); } else { alert(status); // Другая ошибка } } Если все же ошибка связана с timeout, то можно вручную установить нужное значение, явно указав значение ожидания в миллисекундах: Set a timeout (in milliseconds) for the request. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. Стандартное значение timeout зависит от конкретной реализации браузера, судя по ответу на enSO.

Комментариев нет:

Отправить комментарий