Javascript XMLHttpRequest.DONE值有问题吗?

Javascript XMLHttpRequest.DONE值有问题吗?,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我有一段Javascript需要调试: var httpRequest = new XMLHttpRequest(); httpRequest.onreadystatechange = function() { if (this.readyState === XMLHttpRequest.DONE) { if (this.status === 200) { success = true; } } }; 在Chrome和Fi

我有一段Javascript需要调试:

var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
    if (this.readyState === XMLHttpRequest.DONE) {
        if (this.status === 200) {
            success = true;
        }
    }
};
在Chrome和Firefox上,我发现第一个“如果”失败了。我可以看到“this.readyState”被设置为“1”,根据W3C规范判断,这意味着“OPENED”。将鼠标悬停在Firebug中的“.DONE”段上,会将其显示为未定义,而不是“4”

Firefox和Chrome中是否存在不支持这些值的问题


提前谢谢

您应该根据其中一个数值检查readyState,在您的情况下为4。

某些浏览器不知道
XMLHttpRequest.DONE
属性,因此您应该在第一个“if”之前检查它:

var DONE =  (typeof XMLHttpRequest.DONE !== 'undefined') ? XMLHttpRequest.DONE : 4;

您可以使用httpRequest变量已经具有的DONE值:

var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
    if (this.readyState === this.DONE) {
        if (this.status === 200) {
            success = true;
        }
    }
};

太好了,就这样了。谢谢!一个小提示:
XMLHttpRequest.DONE
应该包含数值
4
,但它没有在IE8及以下版本中实现。请解释(在您的回答中)这是如何回答OP的问题的。事实上,这只是一段没有太多上下文的代码。由于它返回
undefined
,它不是缩短为只
XMLHttpRequest.DONE | | 4
,weirdI不认为您的
this.done
中的
this
值指的是
httpRequest
变量?@AJarofClay事实上,也由变量
httpRequest
:)表示的是XMLHttpRequest。如果您使用
控制台.log(this)
执行此示例,您可以测试它:)