很好的JSON,但是浏览器抛出错误

Good JSON but browser throws error

本文关键字:浏览器 出错 错误 JSON 很好      更新时间:2023-09-26

我有一个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似乎是这样认为的。然而,在我的浏览器(Chrome on Windows)这抛出一个错误未捕获语法错误:意外令牌非法。

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

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

由于某些原因,浏览器对属性值中的空格提出了异常。如果我将字符串折叠成

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

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

也许有人能告诉我我错在哪里?

如果我删除第一个和最后一个',它不会抛出错误,像这样:

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)"}};

JavaScript字符串中不能有断行符

删除或转义它们。更好的做法是:不要使用JSON,只使用JavaScript对象文字,这将节省您必须有一个单独的解析步骤。

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

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