为什么 jquery ajax 文档的意思是 "For backward compatibility with XMLHttpRequest"

Why does the jquery ajax documentation mean when it says "For backward compatibility with XMLHttpRequest"

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

For backward compatibility with XMLHttpRequest, a jqXHR object will expose the following properties and methods:

为什么是这样 "backwards compatibility"? 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 + ")" );
});

Why is this "backwards compatibility"?

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

And if so, what is the proper way to access the HTTP response if not through the jqXHR object?

通过回调函数的参数success and/or promise的done.

It seems that a lot of blog posts about .ajax() tell you to use success and error, despite that they are deprecated.

不,他们不是。您将 jqXHR.success / jqXHR.error 方法与 ajax 选项中的 successerror callbacks 混淆了。前者暂时出现在 API 中,确实已被弃用;后者一直在 API 中,并且没有被弃用。这很好:

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

如果您愿意,可以使用较新的 promise 内容:

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

success/error/complete 选项并未弃用。