#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.
Комментариев нет:
Отправить комментарий