很好的JSON,但是浏览器抛出错误
Good JSON but browser throws error
我有一个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的长字符串。
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- javascript中的数组出错
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 有时数据是't显示在浏览器中
- 使图像在单击时展开到不大于浏览器
- 使用 javascript 打开新的浏览器窗口时出错
- 在浏览器中播放音频时出错
- "阻止跨来源请求:相同来源策略”;浏览器出错
- 编码'时出错'至'%3F'在谷歌浏览器中
- 如何正确使用postMessage与html5和现代浏览器做跨域消息传递?我还是会出错
- Chrome浏览器在angular web应用中刷新grunt服务时出错
- 在ie浏览器中初始化range .js时出错
- &;谷歌没有定义&;在Chrome浏览器中调用谷歌地图api出错
- 在带有参数的winforms web浏览器控件中从JS调用c#方法出错
- 在iframe中包含jQuery时,Internet Explorer 9(不是早期版本或其他浏览器)出错
- firefox给出XMLHttpRequest“;空”;访问Vimeo API时出错,但Youtube或其他浏览器没有错
- 如何在webkit浏览器中调用stop()而不强制出错
- 节点.js - 浏览器化:解析 tar 文件时出错