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を自動的に変換する必要があるため、これは不要なようです。ありがとう!
同じ問題がありました。例外から定式化されたため、文字列を返します。例えば。 Symfony2プロジェクトでjsonへのシリアル化でカーネルリスナーを使用します。適切なRESTヘッダーに対して正しい。
とにかく、解析するだけです。これは私のために働く:
$.ajaxSetup({
"error": function(jqXHR, status, thrownError) {
alert('error');
var responseText = jQuery.parseJSON(jqXHR.responseText);
console.log(responseText);
}
});
試して
$.ajaxSetup({
"error": function(jqXHR, status, thrownError) {
alert('error');
console.log(jqXHR.responseJSON);
}
});
ドキュメントで説明されていない方法で$ .ajaxを使用しています。 json
をdataTypeとして使用することは、success
コールバックに渡されたデータが解析されることを意味します。次のように使用します。
$.ajax({
dataType:'json',
type: 'GET',
url: "http://example.com/api/"
success: function(data, textStatus, jqXHR) {
// `data` contains parsed JSON
},
error: function(jqXHR, textStatus, errorThrown) {
// Handle any errors
}
});
ドキュメントには、responseTextが名前が示すとおりのテキスト以外のものであることを示唆するものはありません。
。getJSON を使用しないのはなぜですか?それはあなたが書いたコードの半分を取り除き、レスポンスをJSONに変換します。勝ち勝ち。
ステップ1:jqXHRを文字列化する
var errorString = JSON.stringify(jqXHR.responseText);
ステップ2:その文字列をJqueryオブジェクトに変更します
var $errorObj = $(errorString);
ステップ3:responseTextの必要な部分を見つけて取得します。
var errorMessage = $errorObj.find('p').eq(1).text();
/* Here Im finding `Message:` thrown by the server, which is inside <p> tag */
それでおしまい。
$.ajax( /* ... */ ).fail( function(jqXHR, textStatus, errorThrown) {
var errorString = JSON.stringify(jqXHR.responseText);
var $errorObj = $(errorString);
var errorMessage = $errorObj.find('p').eq(1).text();
alert(errorMessage);
} );