web-dev-qa-db-ja.com

ここで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/

編集:OK、データは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);
  });
_
6
theclarkofben

OK、最終的に私は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);
  });

最後にそこに着きました!

2
theclarkofben

デフォルトでは、jQUeryは応答のタイプを推測しようとします。応答のヘッダーがapplication/jsonの場合、dataはjavascriptオブジェクトになります。これがtext/htmlまたはtext/plainのようなものである場合、dataは応答の本文を含む単純な文字列になります。

また、data.responseTextは、文字列(またはプロパティのないjavascriptオブジェクトundefined)で呼び出すと、明らかにresponseTextになります。

JQuery ajaxのドキュメントを参照してください: http://api.jquery.com/jquery.ajax/

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

最初のパラメータはデータです。 jqXHRが必要な場合、これは3番目のパラメーターです。

3
Magus

データはこれです:

{
  "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が未定義を返す理由です。 responseTextはオブジェクトの属性ではありません

1
D Slee