jqXHR.responseText が JSON オブジェクトではなく文字列を返すのはなぜですか? 質問する

jqXHR.responseText が JSON オブジェクトではなく文字列を返すのはなぜですか? 質問する

dataType が "json" に設定された $.ajax() リクエストがあります。サーバーは正しい MIME タイプ "application/json" で JSON を返します。しかし、jqXHR オブジェクトの responseText は常に文字列です。何が間違っているのでしょうか? これは正しい動作なのでしょうか?

電話をかける方法は次のとおりです。

var options = { 
    dataType:'json',
    type: 'GET',
    url: "http://example.com/api/"
};

var key = "PassToCallback";

var jqXHRObject =  $.ajax(options).then(
    function(data, textStatus, jqXHR, key) {
        this.success(data, textStatus, jqXHR, key);
    },
    function(jqXHR, textStatus, errorThrown) { 
        this.error(jqXHR, textStatus, errorThrown);
    }
);

console.log(jqXHRObject.getResponseHeader("content-type")); // application/json
console.log(typeof jqXHRObject.responseText); // string

したがって、実際のオブジェクトを取得するには を実行する必要があります$.parseJSON(jqXHRObject.responseText)。ドキュメントによると、$.ajax() は responseText を自動的に変換するはずなので、これは不要のようです。ありがとうございます!

ベストアンサー1

私も同じ問題を抱えていました。例外から生成されたため、文字列を返します。たとえば、Symfony2 プロジェクトで json へのシリアル化を備えたカーネル リスナーを使用しています。これは適切な REST ヘッダーでは正しいです。

とにかく、それを解析してください。これは私の場合はうまくいきます:

$.ajaxSetup({
    "error": function(jqXHR, status, thrownError) {
        alert('error');
        var responseText = jQuery.parseJSON(jqXHR.responseText);
        console.log(responseText);
    }
});

おすすめ記事