考虑下面的代码:
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");
}
};
为什么我传递给匿名函数的 id 在第一次调用后会被一次调用延迟?
只有在 Firefox 中似乎是这种方式,在 IEUploadComplete
中以正确的顺序接收 id。
在第二个循环中,我可以在 send(data) 行停止调试器并确认 id 实际上是 1,但是当我到达时,UploadComplete
它在那个参数中结果是 0 :(
编辑:找到解决方案:
在 FireBug 中禁用控制台日志记录。