Страницы

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

среда, 6 марта 2019 г.

Сколько времени 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");
}


Ответ

Для начала стоит убедиться, что возврат 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.

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

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