我有一个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生成服务器端的。
也许有人在这里可以告诉我哪里出错了?
答案 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的长字符串。