在请求完成之前调用ajax成功

时间:2013-03-25 10:18:04

标签: javascript ajax tomcat

在我的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

0 个答案:

没有答案