我的心事就这样结束了……
我遇到的问题是,大约在同一时间(通过请求大约 60-70 分钟)为 ajax 请求调用了成功函数,但 tomcat 日志证明该请求仍在运行。
(观点:请求应该返回一个空字符串(“”)或一个html页面(错误)但是当调用成功函数时,它返回一个长度为2的字符串结果=“”(2个空格字符)
我不能让它在 chrome 中重现,只有 IE(这是一个问题,因为我们满足 IE 的特殊性)
起初我认为这是一个 jQuery 问题,因为我在发送请求时运行了多个民意调查(以更新 jQuery 进度条信息)
然而...
当我只使用一个异步 ajax 请求(不是 jQuery)来测试这个时,该请求调用一个 Java 方法,该方法每秒在日志中循环打印 3 小时,它总是在 3600 秒标记附近调用成功(还剩 7200 秒)。
示例代码:
var http_request = false;
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/text');
}
}
else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!http_request) {
alert('Giving up: Cannot create an XMLHTTP instance');
return false;
}
url += "&random=" + Math.random();
http_request.open('GET', url, true);
http_request.onprogress = function () { };
http_request.ontimeout = function () { };
http_request.onerror = function () { };
http_request.onreadystatechange = function(){
if (http_request.readyState == 4) {
if (http_request.status == 200) {
result = http_request.responseText;
alert("success: ("+result.length+") ["+result+"]");
}
}
};
注意:这不是超时错误(至少不是 ajax 错误),因为 ajax 超时选项似乎可以正常工作并相应地返回超时错误,但正如我所说,它不是超时错误...成功函数被调用得太早。
希望有人可以提供帮助:)
干杯,
史蒂夫。
更新:
我已经使用网络选项卡捕获运行了请求,它显示结果被中止:这里
谢谢@ArunPJohny,这给了我一个新的方向。是否有某种“onAbort”ajax回调?正如我所认为的那样,这种响应会被“错误:”回调捕获
更新 2:
从那以后,我找到了许多 SO 主题的方法,更值得注意的是:xmlhttprequest timeout / abort not working as expected?
Tim 提供了一些有用的链接来捕获中止,但仍然不知道它为什么中止。
后续:这里