Почему 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 не является атрибутом объекта

Другие вопросы по тегам