为什么这里未定义 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/json
,data
将是 javascript object。如果这类似于 text/html
或 text/plain
,data
将是一个包含响应的 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);
});
终于到了!
$.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/json
,data
将是 javascript object。如果这类似于 text/html
或 text/plain
,data
将是一个包含响应的 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);
});
终于到了!