我刚刚注意到安装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秒延迟服务器端没有问题。我没有尝试过任何其他浏览器。
我想解决方案是在发送之前启动计时器,但我只是想知道这种行为背后的原因,如果它没问题,因为我以前从未经历过。
答案 0 :(得分:1)
你说“在退出send()函数之前”,但事实并非如此。你正在调用send然后你正在构建一个计时器,但事情正在发生得如此之快,以至于在你将计时器放入其变量之前,回调就会发生。它是异步的,就像你要求的那样。只需要为此做好准备。