1

我有一个 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 在服务器端生成的。

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

4

3 回答 3

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)"}};
于 2013-06-11T09:08:50.283 回答
2

JavaScript 字符串文字中不能有文字换行符。

删除或逃脱它们。更好:不要为此使用 JSON,而只有一个 JavaScript 对象字面量,这将使您不必有一个单独的解析步骤。

于 2013-06-11T09:11:49.517 回答
1

正如乔纳斯所说,'从字符串的开头和结尾删除 。

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

于 2013-06-11T09:46:24.720 回答