Почему 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);
});
3 ответа
Хорошо, так что в конце концов я нашел ответ в документации по jqXHR:
jqXHR.done (function (data, textStatus, jqXHR) {});
Альтернативная конструкция для опции обратного вызова success, метод.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);
});
Получил в конце концов!
По умолчанию jQUery пытается угадать тип ответа. Если заголовки ответа application/json
, data
будет объект JavaScript Если это что-то вроде text/html
или же text/plain
, data
будет простой строкой, содержащей тело ответа.
А также data.responseText
очевидно undefined
если вы вызываете это в строке (или объект JavaScript, без свойства 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 возвращает undefined; responseText не является атрибутом объекта