对为什么 .done() 不传入 jqXHR 对象感到困惑?

Puzzled as to why .done() not passing in the jqXHR object?

var theRequest = $.ajax({
    url: 'http://jsonplaceholder.typicode.com/posts/1',
    method: 'GET',
}).done(function(data){
        console.log(data);
        console.log(theRequest.responseText);
  });

我的理解是否正确,在 .done() 方法中传递给函数的 data 应该是从 $.ajax() 返回的 jqXHR 对象要求?

我认为下面的代码会起作用,但它不起作用,因为 data 没有 responseText 属性,我认为它会起作用,因为我认为它应该是jqXHR 对象从 $.ajax() 请求返回?

$.ajax({
    url: 'http://jsonplaceholder.typicode.com/posts/1',
    method: 'GET',
}).done(function(data){
        console.log(data);
        console.log(data.responseText);
  });

Is my understanding correct that the data that is passed in to the function within the .done() method should be the jqXHR object that is returned from the $.ajax() request?

不是,data将是请求返回的数据。来自 the documentation:

jqXHR.done(function( data, textStatus, jqXHR ) {});

An alternative construct to the success callback option, the .done() method replaces the deprecated jqXHR.success() method. Refer to deferred.done() for implementation details.

...我承认这还不够彻底。 :-) 但请注意显示的函数签名中的三个参数:datatextStatusjqXHR。如果您在选项中使用它,这些与 success 函数相同,因此它们的文档很有用:

Type: Function( Anything data, String textStatus, jqXHR jqXHR )

A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter or the dataFilter callback function, if specified; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object.

.done() 方法接收三个参数:datatextStatusjqXHRdata 是来自 AJAX 请求的响应;如果您使用 dataType: 'json',它将是解析 JSON.

的对象

responseText 属性 在 jqXHR 参数中。应该是:

.done(function(data, textStatus, jqXHR) {
    console.log(data);
    console.log(jqXHR.responseText);
});

两条日志信息应该是一样的。

如果您看到 .done 原型,则第三个参数将是 jqXHR 而第一个参数将是 data 作为响应返回。

jqXHR.done(function( data, textStatus, jqXHR ) {});

An alternative construct to the success callback option, the .done() method replaces the deprecated jqXHR.success() method. Refer to deferred.done() for implementation details.

Source

.done 是文档中提到的 .success 的替代方法。

因此,如果将 jqXHR 作为第 3 个参数包含在 .done

中,则可以获取 jqXHR