为什么这里未定义 responseText?

Why is responseText undefined here?

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

谁能帮我理解为什么 console.log(data.responseText); 返回未定义?

http://clarkben.com/ajaxtesting/

编辑:好的,看起来数据不是 jqXHR 对象。如果将整个 $.ajax 语句分配给一个变量,那么该变量就是一个 jqXHR 对象,因此可以通过这种方式访问​​它。我不确定为什么传递给作为 .done 一部分的函数的数据不是 jqXHR 对象。

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

默认情况下,jQUery 尝试猜测响应的类型。如果响应的 headers 是 application/jsondata 将是 javascript object。如果这类似于 text/htmltext/plaindata 将是一个包含响应的 body 的简单字符串。

并且 data.responseText 显然是 undefined 如果你在字符串上调用它(或者 javascript object 没有 属性 responseText )

请参阅 jQuery ajax 文档:http://api.jquery.com/jquery.ajax/

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

第一个参数是数据。如果你想要jqXHR,这是第三个参数。

数据是这样的:

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

这可能就是为什么数据是一个对象,并且 jQuery 将其解释为对象。这就是为什么 data.responseText returns undefined; responseText 不是对象的属性

好的,最终我在 jqXHR 文档中找到了答案:

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.

现在下面的代码可以工作了:

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

终于到了!