Javascript 正在中止的XMLHttpRequest

Javascript 正在中止的XMLHttpRequest,javascript,xmlhttprequest,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]

我正在查看一些处理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;
}
url=”http://192.168.1.1/cgi-bin/test.cgi";
data=“1235123,21123212321432”;
myXHR=新数组();
对于(变量i=0;i<2;i++){
myXHR[i]=新的XMLHttpRequest();
myXHR[i].打开(“POST”,url,true);
myXHR[i].onerror=function(){
警报(“发生错误”);
};
myXHR[i].onload=function(){
if(myXHR[i].状态==200){
警惕(“耶,我工作过”);
var data=myXHR[i].responseText;
}
};
//对XHR头进行一些设置
myXHR[i].发送(数据);
myXHR[i]=null;
}
什么情况会导致Firebug在第二个.send()完成之前显示中止?

尝试以下操作:

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;
}
url=”http://192.168.1.1/cgi-bin/test.cgi";
data=“1235123,21123212321432”;
var myXHR=[];
对于(变量i=0;i<2;i++){
myXHR[i]=新的XMLHttpRequest();
myXHR[i].打开(“POST”,url,true);
myXHR[i].onerror=function(){
警报(“发生错误”);
};
myXHR[i].onload=function(){
if(myXHR[i].状态==200){
警惕(“耶,我工作过”);
var data=myXHR[i].responseText;
}
};
//对XHR头进行一些设置
myXHR[i].发送(数据);
myXHR[i]=null;
}

当我运行此代码时,我得到了
类型错误:myXHR[I]未定义
(在我的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
值保存在该函数体中,这两个调用的代码都将成功

我知道这不是你面临的问题,但我认为这将是一个问题,所以你不妨试一试,好吗?不幸的是,这并不是说有很多其他的答案


希望这能有所帮助。

了解发生了什么

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


现在一切都好了。谢谢你的帮助。

你能删除
myXHR[i]=null并告诉我们发生了什么?此外,url是否发送CORS头?如果删除赋值null,仍然会发生这种情况。CORS是跨服务器的?请求实际上是发送到自身的,因此不存在子网或域的交叉。最好提及对代码所做的调整,这样人们就不必直观地将其与OP的示例进行比较。“试试这个”并没有真正的帮助是的,不幸的是这并没有解决它,但这是有意义的,谢谢。