我正在查看一些处理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?
答案 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。
现在好了。谢谢你的帮助。