Сколько времени .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.