37

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)、実際のオブジェクトを取得するには a を実行する必要があります。$.ajax() は docs に従って responseText を自動的に変換する必要があるため、これは不要のようです。ありがとう!

4

5 に答える 5

53

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

とにかく、それを解析してください。これは私のために働く:

$.ajaxSetup({
    "error": function(jqXHR, status, thrownError) {
        alert('error');
        var responseText = jQuery.parseJSON(jqXHR.responseText);
        console.log(responseText);
    }
});
于 2012-07-21T20:45:37.963 に答える
24

試す

$.ajaxSetup({
    "error": function(jqXHR, status, thrownError) {
        alert('error');            
        console.log(jqXHR.responseJSON);
    }
});
于 2014-02-14T15:35:15.263 に答える
3

ドキュメントで説明されていない方法で$.ajaxを使用しています。dataTypejsonとして使用するということは、コールバックに渡されるデータ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
  }
});
于 2011-04-28T23:13:25.417 に答える
2

responseText が正確に名前が意味するもの以外のものであることを示唆するドキュメントには何も表示されません: テキスト.

.getJSONを使用しないのはなぜですか? これにより、作成したコードの半分が削除され、応答が JSON に変換されます。勝つ/勝つ。

于 2011-04-28T23:07:40.950 に答える
-1

ステップ 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);

    } );
于 2017-02-19T15:46:40.623 に答える