1

次のように、サーバーからJavaScriptにJSONが送信されます-

<script>
   var resp = <?php  echo getjsonFromServer() . ';'?> 
   resp=JSON.parse(resp);
   displayStats(resp);
</script>

これにより、「SyntaxError: Unexpected token o」というエラーが発生し、コンソールを確認すると、応答が既に JSON parsed されていることがわかります。つまり、既に解析された answer を JSON.parse しようとするべきではありませんでした。

私の質問は - どうしてですか?私の JSON を解析したのは誰ですか? サーバーから JSON を取得するたびに JSON.parse を呼び出すことに慣れています (例: ajax 呼び出し)。ここで同じではないのはなぜですか?

注 - 私のPHPはこのようなものです

header('"Content-Type":application/json');
$js = json_encode($js);
echo $js;
4

3 に答える 3

5

生成されたソースを見てください。

生のJSONをエコーし​​ているので、ソースは次のようになります。

var resp = { "property": "value", ... };

これはオブジェクトリテラルであり、文字列ではありません

于 2012-12-17T21:37:02.427 に答える
2

JSONではありません。プレーンな古いJavaScriptをレンダリングしています。

<script>
   var resp = (<?php  echo getjsonFromServer() ?>); 
   displayStats(resp);
</script>

これでうまくいくはずです。

疑問に思われるかもしれませんが、角かっこを追加すると、ブラウザはコードをコードブロックではなくオブジェクトリテラルとして解析します。

于 2012-12-17T21:37:54.467 に答える
0

ブラウザは、オブジェクトの作成に php 関数が使用されていることを知りません。ブラウザにとっては、そもそもソースの一部であるかのように、JavaScript にすぎません。

于 2012-12-17T21:45:58.347 に答える