【发布时间】:2011-11-29 17:35:51
【问题描述】:
我的浏览器开始出现错误,解析来自服务器的 JSON 返回数据。起初我认为这是我的数据特有的东西,但即使是像这样的愚蠢的东西
{"a": 1}
在 Firefox 中导致错误“无效标签”,在 Chrome 中导致错误“SyntaxError: Unexpected token :”。当它更改为
{a:1}
(即删除标签周围的双引号)它工作正常。但是,我确信即使使用双引号,它也是有效的 JSON(JSONLint 同意这一点)。
我看到的解决方法是用括号括住 JSON 对象,如下所示:
({"a":1})
这在浏览器控制台中有效,但是当我更改服务器数据(响应 JSONP 调用)并且我也无法在浏览器中更改它时,因为我使用的是库(Dojo)和我没有机会在解析之前拦截返回数据。
更新
我在我的服务器代码中发现了一个错误,我没有将数据包装在 JS 函数中以用于 JSONP 响应。这已经解决了这个问题,我随后需要删除这个问题。抱歉,并感谢您的回复。
【问题讨论】:
-
更糟糕的是,我确信这在以前有效,但我无法解释如何或为什么。
-
请说明您是如何解析 JSON 的。双引号对于有效的 JSON 键名是必需的,但我认为问题在于您正在执行 JSONP 调用,因此客户端代码期望看到它可以执行的一些 JS。它将 { 视为代码块的开头,而不是对象文字的开头,因此当它看到冒号时,它认为它之前的事物是标签(例如您可以与 continue 或 break 语句一起使用) .把整个东西放在括号中意味着它被解释为一个表达式。 JSONP 和 JSON 的工作方式不同。
-
我很抱歉,但我发现我的服务器代码中有一个错误,即数据没有按应有的方式包装在 JSONP 响应的函数调用中。因此,我将删除这个问题。尽管如此,还是感谢您的时间、精力和解释。
标签: javascript json