JSON.parse是否隐式调用?

时间:2012-12-17 21:34:57

标签: php javascript json

我有JSON从我的服务器进入我的javascript,如此 -

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

这会产生错误'SyntaxError:Unexpected token o',当我检查控制台时,我发现响应已经被JSON解析了。意思是我不应该尝试JSON.parse已经解析过的答案。

我的问题是 - 怎么样?谁为我解析了我的JSON?每当我从服务器获得JSON时,我习惯调用JSON.parse,例如ajax调用。为什么在这里不一样?

注意 - 我的PHP是这样的

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

3 个答案:

答案 0 :(得分:5)

查看您生成的来源。

您正在回显原始JSON,因此您的来源看起来像

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

这是一个对象文字,而不是字符串

答案 1 :(得分:2)

这不是JSON。您正在渲染普通的旧JavaScript。

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

这应该这样做。

如果您想知道:添加括号使浏览器将您的代码解析为对象文字而不是代码块。

答案 2 :(得分:0)

浏览器不知道使用php函数来创建对象。对于浏览器来说,它只是javascript,好像它首先是源代码的一部分。