正在中止的XMLHttpRequest

时间:2013-05-23 21:24:25

标签: javascript xmlhttprequest

我正在查看一些处理XHR的代码。看起来第一个XHR.send()正在成功完成,然后后续的一个在它到达之前被中止.send()

快速肮脏:

url = "http://192.168.1.1/cgi-bin/test.cgi";
data = "1235,123,21,1232,12321,432";
myXHR = new Array();

for(var i = 0; i < 2; i++) {
  myXHR[i] = new XMLHttpRequest();
  myXHR[i].open("POST", url, true);

  myXHR[i].onerror = function() {
   alert("Error occurred");
  };

  myXHR[i].onload = function() {
    if(myXHR[i].status == 200) {
      alert("Yay I worked");
      var data = myXHR[i].responseText;
    }
   };

   // do some setting up of XHR headers

   myXHR[i].send(data);

   myXHR[i] = null;
}

可能会发生什么事情会导致Firebug在第二次.send()完成之前显示Abort?

3 个答案:

答案 0 :(得分:0)

试试这个:

url = "http://192.168.1.1/cgi-bin/test.cgi";
data = "1235,123,21,1232,12321,432";
var myXHR = [];

for(var i = 0; i < 2; i++) {
  myXHR[i] = new XMLHttpRequest();
  myXHR[i].open("POST", url, true);

  myXHR[i].onerror = function() {
   alert("Error occurred");
  };

  myXHR[i].onload = function() {
    if(myXHR[i].status == 200) {
      alert("Yay I worked");
      var data = myXHR[i].responseText;
    }
   };

   // do some setting up of XHR headers

   myXHR[i].send(data);

   myXHR[i] = null;
}

答案 1 :(得分:0)

当我运行此代码时,我得到TypeError: myXHR[i] is undefined(在我的Mac上安装firefox 20的库存...你在用什么版本)?

无论如何,我可以看到一个问题(即myXHR [i]将是未定义的......)也可能适用于你,尤其是:

myXHR[i].onload = function() {
  if(myXHR[i].status == 200) {
    alert("Yay I worked");
    var data = myXHR[i].responseText;
  }
};

因为这是异步触发的i将增加到2,这当然会超出两个元素myXHR数组的范围。您是否尝试过关闭i的值,如下所示:

myXHR[i].onload = (function(i) {
  return function() {
    if(myXHR[i].status == 200) {
      alert("Yay I worked");
      var data = myXHR[i].responseText;
    }
  }
})(i);

因为一旦我在该函数体中正确保存了i值,这个代码就会成功进行两次调用。

我知道这不是你所遇到的确切问题,但我认为这将是一个问题,所以你不妨这样做吧?不幸的是,并不存在大量其他答案。

希望这会有所帮助..

答案 2 :(得分:0)

了解发生了什么。

XHR正在中止,因为请求被发送到的Web服务器没有返回值。 Web服务器是一个基于自定义的服务器,我们似乎正在使用某人更改了代码,因此即使发送给它的数据没有数据返回,它也不会发送200 Success OK。

现在好了。谢谢你的帮助。