我正在查看jQuery ajax方法的当前版本(1.11.2)的文档。它在jqXHR
对象的解释前面加上以下行:
为了与
XMLHttpRequest
向后兼容,jqXHR
对象将公开以下属性和方法:
为什么这是"向后兼容"? XMLHttpRequest
已被弃用吗?如果是这样,如果没有通过jqXHR
对象,访问HTTP响应的正确方法是什么?
注意:很多关于.ajax()
的博文似乎都会告诉您使用success
和error
,尽管它们已被弃用。我应该做更像的事情吗?
$.ajax( ... )
.done(function(data, textStatus, jqXHR) {
console.log("success: " + jqXHR.responseText );
})
.fail(function(jqXHR) {
console.log( "error: " + jqXHR.status + " (" + jqXHR.responseText + ")" );
});
答案 0 :(得分:2)
为什么这是“向后兼容”?
因为很久以前,jQuery的ajax
方法直接返回了XMLHttpRequest
对象。
如果是这样,如果没有通过jqXHR对象,访问HTTP响应的正确方法是什么?
通过回调函数success
和/或promise done
的参数。
似乎有很多关于.ajax()的博客文章告诉你使用成功和错误,尽管它们已被弃用。
不,他们不是。您将jqXHR.success
/ jqXHR.error
方法与ajax选项中的success
和error
回调混淆了。前者非常暂时在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
选项。