2

サーバーは次の JSON ドキュメントを返します。

{
"username-found": true,
"question-required": true
}

JSONLint の有効性チェックに合格します。

ウェブブラウザで:

$.post('my_url', {"post":"data"}, function(data) {
  data = $.parseJSON(data);
});

コードは実行され、Opera 12 ブラウザーで JSON ドキュメントを正常に解析しますが、Firefox 16 では JavaScript エラーが発生し、「整形式ではありません」と表示されます。

JQuery のバージョンは 1.7.2 です。

私がそこで何を間違えたのかわかりません。

編集:

サーバーがJSONを返す方法と関係がありますか? ここにあります:

return new StreamingResolution("text", new StringReader(json.toString()));

推測、私は原因を見つけたかもしれません。私が行ったときalert(data)、Firefoxはそれdataがオブジェクトであることを教えてくれ、OperaはそれdataがJSON文字列であることを教えてくれます。

4

3 に答える 3

2

解決策 1 (クライアント) - jQuery リクエストで DataType を設定する

その特定のブラウザー バージョンでは内部が少し異なると思います (jQuery は dataType を自動的に検出しようとし、JSON 応答の場合は内部で解析を行うため)、JSON は Opera ではなく FF で自動的にエンコードされますか?

jQueryがこれを処理するようにdataTypeを追加してみてください(私はそれを好むでしょう):

$.post('my_url', {"post":"data"}, function(data) {
    // data should be an json object here
}, 'json');

それはただの推測です。

または解決策 2 (サーバー) - MIME タイプを送信する

クライアントで dataType を設定する必要がないように、サーバーから正しい MIME タイプを送信することもできます。それはあなた次第ですが、それが正しい解決策になると思います。

この答えに関しては、 application/json.

参照

jQueryでdataTypeはどのように自動的に検出されますか?

デフォルト: Intelligent Guess (xml、json、script、または html) サーバーから返されると予想されるデータのタイプ。何も指定されていない場合、jQuery は応答の MIME タイプに基づいてそれを推測しようとします (XML MIME タイプは XML を生成し、1.4 では JSON は JavaScript オブジェクトを生成し、1.4 ではスクリプトがスクリプトを実行します。文字列として返されます)。

ソース: http://api.jquery.com/jQuery.ajax/

于 2012-10-26T00:25:45.093 に答える
1

dataオブジェクトを直接使用できます。

使用する必要はありません$.parseJSON();

于 2012-10-26T00:30:22.303 に答える
0

jQueryには$.getJSONショートカットメソッドもあります。たぶん、jQueryはこの場合に最適な構成を自動的に使用し、おそらく動作を開始します

これが$.getJSONのドキュメントです

于 2012-10-26T00:29:56.827 に答える