JQueryのAjaxのJSONを取得したい


JQueryのAjaxでdone()を使用しています。その返り値から以下のようにJsonデータを取得しようとしているのですが、エラーがでてできません。

[code]

    //$.Ajax().done(function(response){
      var data = $.parseJSON(response.responseJSON);
    });
    
[/code]

エラー

[code]

    Uncaught SyntaxError: Unexpected token o  //エラー箇所localhost/:1
    
[/code]

レスポンスのJSONは以下のものです。

[code]

    {"code":900,"message":"Already existed"}
    
[/code]

どうすればJSONを取り出してオブジェクトにできるのかおしえてください。よろしくお願いします。




`.done()`メソッドで使っている関数内の変数`response`には既に解析済みのJSONオブジェクトが入っています。これは`response.message`のように扱うことができます。

実行サンプル:

[code]

    var obj = {
      "code": 900,
      "message": "Already existed"
    };
    
    var jqxhr = $.ajax({
        type: 'POST',
        dataType: "json",
        url: "/echo/json/",
        dataType: "json",
        data: {
          json: JSON.stringify(obj)
        }
      })
      .done(function(response) {
        console.log("ajax done.");
        $("#code").text(response.code);
        $("#message").text(response.message);
      })
[/code]

[code]

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <table border="1">
      <tbody>
        <tr>
          <th>code</th>
          <td id="code"></td>
        </tr>
        <tr>
          <th>message</th>
          <td id="message"></td>
        </tr>
      </tbody>
    </table>
    
    <div id="error"></div>
[/code]

また余談ですが、質問コードに含まれる`responseJSON`はjqXHRオブジェクトのプロパティに存在します。これを利用すれば以下のような書き方もできます。

[code]

    $.ajax(...)
      .done(function(data, textStatus, jqXHR) {
        console.log(data === jqXHR.responseJSON); //-> true
      });
    
[/code]

参考リンク: <http://js.studio-kingdom.com/jquery/ajax/ajax#3>




`responseJSON`にはJSONの文字列ではなく、`$.parseJSON`で解析済みのオブジェクトが格納されます。つまり`responseJSON`をそのまま使えばよく、`$.parseJSON`は不要です。

