请考虑以下代码:
this.usedIds = 0;
this.SendData = function(data)
{
var id = this.usedIds;
this.usedIds++;
this.xmlHttpThing.open("POST", "/Upload.aspx", true);
this.xmlHttpThing.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var currentObject = this;
this.xmlHttpThing.onreadystatechange = function() { currentObject.UploadComplete(id) };
this.xmlHttpThing.send(data);
};
this.UploadComplete = function(id)
{
if (this.xmlHttpThing.readyState == 4)
{
//First time id is 0
//Second time id is 0 <<<--------- Why??
//Third time id is 1
//Fourth time id is 2
//Fifth time id is 3 ....
this.SendData("blabla");
}
};
为什么传递给anonymus函数的id会在第一次调用后被一次调用延迟?
在Firefox中似乎只有这种方式,在IE中,UploadComplete以正确的顺序接收ID。
在第二个循环中,我可以在send(data)-line处停止调试器并确认id实际为1但是当我到达UploadComplete时,在该参数中结果为0:(
编辑:找到解决方案: 禁用FireBug中的控制台日志记录。
答案 0 :(得分:0)
我过去也遇到过同样的问题。我不记得是什么导致了它,但我通过将增量移动到响应处理程序来修复它。
this.UploadComplete = function(id)
{
if (this.xmlHttpThing.readyState == 4)
{
this.usedIDs++;
this.SendData("blabla");
}
};
编辑:在考虑之后,我的情况可能与您的情况有所不同。分配this.usedIDs
时,为什么不递增id
?
var id = this.usedIDs++;
答案 1 :(得分:0)
禁用Firebug中的控制台记录解决了这个问题!