为什么jquery ajax文档的含义是“为了向后兼容XMLHttpRequest”

时间:2015-03-05 00:14:58

标签: jquery ajax xmlhttprequest jqxhr

我正在查看jQuery ajax方法的当前版本(1.11.2)的文档。它在jqXHR对象的解释前面加上以下行:

  

为了与XMLHttpRequest向后兼容,jqXHR对象将公开以下属性和方法:

为什么这是"向后兼容"? XMLHttpRequest已被弃用吗?如果是这样,如果没有通过jqXHR对象,访问HTTP响应的正确方法是什么?

注意:很多关于.ajax()的博文似乎都会告诉您使用successerror,尽管它们已被弃用。我应该做更像的事情吗?

$.ajax( ... )
.done(function(data, textStatus, jqXHR) {
    console.log("success: " + jqXHR.responseText );
})
.fail(function(jqXHR) {
    console.log( "error: " + jqXHR.status + " (" + jqXHR.responseText + ")" );
});

1 个答案:

答案 0 :(得分:2)

  

为什么这是“向后兼容”?

因为很久以前,jQuery的ajax方法直接返回了XMLHttpRequest对象。

  

如果是这样,如果没有通过jqXHR对象,访问HTTP响应的正确方法是什么?

通过回调函数success和/或promise done的参数。

  

似乎有很多关于.ajax()的博客文章告诉你使用成功和错误,尽管它们已被弃用。

不,他们不是。您将jqXHR.success / jqXHR.error方法与ajax选项中的successerror 回调混淆了。前者非常暂时在API中,并且确实已被弃用;后者已经永远存在于API中,并且不会被弃用。这非常好:

$.ajax({
    url: "/whatever",
    success: function(data) {
        // Do something with `data`
    },
    error: function() {
        // Handle error
    },
    complete: function() {
        // Handle completion
    }
});

如果您愿意,请使用较新的承诺:

$.ajax({
    url: "/whatever"
}).done(function(data) {
    // Do something with `data`
}.fail(function() {
    // Handle error
}).always(function() {
    // Handle completion
});

但不推荐使用success / error / complete选项。