好JSON但浏览器抛出错误

时间:2013-06-11 09:01:36

标签: php javascript json

我有一个PHP脚本正在构建HTML(5)文档的标题部分。发出的部分内容是这样的

$rtn = <<<RTN
<script type='text/javascript'>
var _scrolls = {"alpha":{"cursorborder":"1px dashed rgba(200,13,57,1)"}};
var _floors = new Array(10000,{$mqt},{$mqf});
</script>
RTN;

JSON是有效的 - 至少JSONlint.com似乎这么认为。但是,在我的浏览器(Windows上的Chrome)中,这会引发错误未捕获的语法错误:意外的令牌非法。

通过一些实验,我将问题缩小到最后一个属性

"cursorborder":"1px dashed rgba(200,13,57,1)"

由于某种原因,浏览器对属性值中的空格进行异常处理。如果我折叠该字符串以便它读取

"cursorborder":"1pxdashedrgba(200,13,57,1)"

语法错误消息消失。我想不出任何合理的解释。为了完整性,我想我应该提一下,JSON是由json_encode生成服务器端的。

也许有人在这里可以告诉我哪里出错了?

3 个答案:

答案 0 :(得分:3)

如果我删除第一个和最后一个',它不会抛出错误,如下所示:

var _scrolls = {"alpha": {"bouncescroll":true,"boxzoom":false,"enabletranslate3d":true,"dblclickzoom":true,"gesturezoom":true,"hwacceleration":true,"horizrailenabled":true,"enablekeyboard":true,"railalign":"right","enablemousewheel":true,"nativeparentscrolling":true,"enablescrollonselection":true,"sensitiverail":true,"smoothscroll":true,"spacebarenabled":true,"railvalign":"bottom","touchbehavior":false,"autohidemode":false,"cursorcolor":"rgba(245,146,30,1)","background":"rgba(127,255,142,1)","cursorborder":"1px dashed rgba(200,13,57,1)"}};

答案 1 :(得分:2)

您不能在JavaScript字符串文字中包含文字换行符。

删除或逃避它们。更好:不要使用JSON,只需拥有一个JavaScript对象文字,这将使您不必再进行单独的解析步骤。

答案 2 :(得分:1)

正如Jonas所说,从字符串的开头和结尾删除'

这样,变量将成为有效的Javascript对象,而不仅仅是包含JSON的长字符串。