$.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);
});
答案 0 :(得分:3)
默认情况下,jQUery尝试猜测响应的类型。如果回复的标头为application/json
,则data
将成为javascript对象。如果这类似于text/html
或text/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);
});
最后到达那里!