2

我的心事就这样结束了……

我遇到的问题是,大约在同一时间(通过请求大约 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 提供了一些有用的链接来捕获中止,但仍然不知道它为什么中止。

后续:这里

4

0 回答 0