0

考虑下面的代码:

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 中禁用控制台日志记录。

4

2 回答 2

0

我过去也有同样的问题。我不记得究竟是什么原因造成的,但我通过将增量移动到响应处理程序来修复它。

this.UploadComplete = function(id)
{
    if (this.xmlHttpThing.readyState == 4)
    {      
        this.usedIDs++;
        this.SendData("blabla");
    }
};

编辑:经过考虑,我的情况可能与您的情况不同。为什么this.usedIDs在分配时不增加id

var id = this.usedIDs++;
于 2009-01-22T21:31:07.577 回答
0

在 Firebug 中禁用控制台登录解决了这个问题!

于 2009-01-22T21:47:28.120 回答