为什么responseText在这里未定义?

时间:2015-09-29 15:25:21

标签: jquery ajax responsetext

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

任何人都可以帮助我理解为什么console.log(data.responseText);返回undefined?

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

3 个答案:

答案 0 :(得分:3)

默认情况下,jQUery尝试猜测响应的类型。如果回复的标头为application/json,则data将成为javascript对象。如果这类似于text/htmltext/plain,则data将是一个包含响应正文的简单字符串。

data.responseText显然是undefined,如果你在字符串上调用它(或者没有属性responseText的javascript对象)

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

  

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

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

答案 1 :(得分:1)

数据就是这样:

{
  "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返回undefined的原因; responseText不是对象的属性

答案 2 :(得分:1)

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

  

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

     

成功回调选项的替代构造,.done()   方法替换已弃用的jqXHR.success()方法。参考   deferred.done()用于实现细节。

现在,下面的代码可以运行:

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

最后到达那里!