在我的whits结束时......
我遇到的问题是大约在同一时间(通过请求大约60-70分钟),为ajax请求调用success函数,但tomcat日志证明请求仍在运行。
(透视:请求应返回空字符串(“”)或html页面(错误)但是当调用success函数时,它返回一个长度为2的字符串result =“”(2 white空格字符)
我无法在chrome中重现这一点,只有IE(这是一个问题,因为我们提供IE的特异性)
起初我虽然这是一个jQuery问题,因为我在发送请求时运行多个民意调查(更新jQuery进度条信息)
...然而
当我用一个异步的ajax请求(不是jQuery)来测试它时,它调用一个只循环3小时的Java方法,每秒在日志中打印出来,它总是在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超时选项似乎正常工作并相应地返回超时错误,但正如我所说,它不是时间-out error ...成功函数过早调用。
希望有人可以提供帮助:)
干杯,
史蒂夫。
更新
我通过网络标签捕获运行请求,并显示结果已中止:here
谢谢@ArunPJohny,这给了我一个新的方向。是否有某种“onAbort”ajax回调?正如我原以为这种反应会被“错误:”回调
所捕获更新2:
我已经找到了许多SO主题,更值得注意的是:xmlhttprequest timeout / abort not working as expected?
Tim提供了一些用于捕获中止的有用链接,但仍然不知道为什么它会被中止。后续:here