对于AJAX调用,可以用xhr.onload替换xhr.onreadystatechange吗?

49 javascript ajax xmlhttprequest

我只需要支持主流的现代浏览器(IE10 +,FF,Chrome,Safari)

我可以进行此替换,因为我想简化我的代码库:

从:

xhr.onreadystatechange = function () {
    if (this.readyState === 4) {
        if (this.status === 200) {
            o.callback(xhr.responseText);
        } else {
            return false;
        }
    } else {
        return false;
    }
};
Run Code Online (Sandbox Code Playgroud)

至:

xhr.onload = function (test) {
    o.callback(xhr.responseText);
};
Run Code Online (Sandbox Code Playgroud)

我不认为MDN文档在这方面是明确的.

澄清:

我选择不使用框架.

mr.*_*Voo 18

也许你看看这个,看看W3C:XMLHttpRequest,如果你的浏览器支持xhr.onload,它就是一样的.需要XMLHttpRequest 2)

如果不存在,你也可以编写一个模拟xhr.onload的包装函数.(我认为你需要覆盖XMLHttpRequest.prototype.onload = function(args){//calling onreadystatechanges somehow}).如果您只支持使用xhr.onload的现代浏览器应该可用 - 最好的解决方案是使用框架(如为其提供包装功能).

  • xhr2由IE10 +支持,当然还有其他3. http://caniuse.com/#search=xhr2 (7认同)
  • 更新:它是2017年 - 现在ES6存在> _ <框架是可选的 (3认同)

Ger*_*ens 14

在MDN文档中,他们声明了以下内容

活动

所有浏览器都支持onreadystatechange作为xhr对象的属性.

从那时起,在各种浏览器中实现了许多额外的事件处理程序(onload,onerror,onprogress等).这些在Firefox中受支持.特别是,请参见nsIXMLHttpRequestEventTarget和Using XMLHttpRequest.

除了将*属性设置为处理函数之外,更新的浏览器(包括Firefox)还支持通过标准的addEventListener API监听XMLHttpRequest事件.

所以我认为你可以假设onreadystatechange是要走的路,而onload是一个可以在浏览器支持时使用的附加功能.@ mr.VVoo答案是正确的,在有疑问时坚持w3c.