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);
}
});