在send-function完成之前,是否可以回调完成的XmlHttpRequest触发器?

时间:2012-03-17 20:14:26

标签: javascript firefox xmlhttprequest

我刚刚注意到安装Firefox 11后我在webapp上出现了一些奇怪的行为。我之前没有看到过这个错误,并且该网站运行了一年多。

var timeOutTimer = null;

var StartDownload = function () {
    xhr.open("GET", "/Download", true);           //Notice asynchronous=true
    xhr.onreadystatechange = DownloadComplete;
    xhr.send("...");

    timeOutTimer = new Timer(......);   //This line gets executed AFTER DownloadComplete()
};

var DownloadComplete = function () {
    if (xhr.readyState == 4) {
        timeOutTimer.Abort();           //<--------timeOutTimer is null here
        //Callstack points back to xhr.send
    }
}

XmlHttpRequest是否真的可以在退出send()函数之前调用onreadystatechange-callback?

仅当我浏览本地开发服务器上的网站时才会出现此错误。此外,如果我添加1秒延迟服务器端没有问题。我没有尝试过任何其他浏览器。

我想解决方案是在发送之前启动计时器,但我只是想知道这种行为背后的原因,如果它没问题,因为我以前从未经历过。

1 个答案:

答案 0 :(得分:1)

你说“在退出send()函数之前”,但事实并非如此。你正在调用send然后你正在构建一个计时器,但事情正在发生得如此之快,以至于在你将计时器放入其变量之前,回调就会发生。它是异步的,就像你要求的那样。只需要为此做好准备。