У меня запущен сервер node.js, и я делаю серию ajax-вызовов на этот сервер через jquery.Ожидается, что один из вызовов ajax займет около 5 минут.Я обнаружил, что при выполнении вызова он всегда прерывается ровно через 4 минуты с ошибкой «net :: ERR_EMPTY_RESPONSE».Я видел такие вопросы, как следующие: ajax net :: ERR_EMPTY_RESPONSE после ожидания ответа в течение 2 минут - сервер node.js , но это происходит независимо от того, установлен ли параметр времени ожидания (либо 0, чтоозначает «нет времени ожидания» в jquery, или если я установлю его как нечто большее, чем 4 минуты - например, 300000, что составляет 5 минут.).Это происходит в точке 4 минуты, каждый раз.
У кого-нибудь есть идеи, почему это происходит?Существует ли верхний предел для вызовов jjery ajax, сколько времени они могут занять - независимо от того, какой параметр времени ожидания установлен?
Вот код, где выполняется вызов ajax:
(этоБлок try находится в функции, которая выполняет ajax-вызов определенного URL-адреса. url
, jsonToSend
и timeout
- все параметры этой функции (в частности, timeout
- это int, aчисло в миллисекундах , для ожидания до истечения времени ожидания вызова)
try {
var ajaxCallConfig = {
method: action,
url: url,
data: jsonToSend,
contentType: "application/json",
success: function (ret) {
deferred.resolve(ret);
},
error: function (xhr, textStatus, errorThrown) {
// I ALWAYS end up in this block, with a net::ERR_EMPTY_RESPONSE being thrown, when I call this function to the long running api endpoint
console.log("Error on Ajax call to " + url + "; json " +
JSON.stringify(jsonToSend) +
"; text status: " + textStatus +
"; error thrown: " + JSON.stringify(xhr));
// check if it was a timeout
if (textStatus === 'timeout') {
// some error handling my server does specific to timeouts...
// left it out as it's not relevant...
// note : never hit this block, when the net::ERR_EMPTY_RESPONSE issue happens. (when i call the long-running api)
// but I hit this block if i give some dummy low value to the 'timeout' param to force a timeout.
}
else {
if (xhr.responseJSON) {
// under this case, server sent the response and set
// the status code
deferred.reject(xhr.responseJSON);
}
else {
// under this case, the error status is not set by
// server, it may due to other reasons
deferred.reject("Connection Error: " +
" Connection to server cannot be established");
}
}
}
};
if (typeof timeout !== 'undefined') {
console.log("set a timeout of " + timeout); // timeout is definitely being set, as I see this in console logs
ajaxCallConfig.timeout = timeout; // timeout attr does work , because when I try this with a very low number, say 300, it times out immediately
}
jQuery.ajax(ajaxCallConfig); // here we're making the ajax call
}
// перехватить блок, остаток функции ..