0

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

为了向后兼容XMLHttpRequestjqXHR对象将公开以下属性和方法:

为什么这是“向后兼容”?是否XMLHttpRequest已弃用?如果是这样,如果不通过jqXHR对象访问 HTTP 响应的正确方法是什么?

注意:似乎很多关于.ajax()告诉您使用successand的博客文章error,尽管它们已被弃用。我应该做更多类似的事情:

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

1 回答 1

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
    }
});

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

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

但是不推荐使用success//选项errorcomplete

于 2015-03-05T00:18:40.627 回答