2011-11-28 102 views
0

我开始在浏览器中发现错误,从服务器解析JSON返回数据。起初我以为这是专门针对我的数据的东西,但即使是一些愚蠢像带双引号的标签在浏览器中产生错误“无效标签”

{"a": 1} 

结果在Firefox中的错误“无效的标签”和“语法错误:意外标记:”在Chrome中。当更改为

{a:1} 

(即删除标签周围的双引号)它工作正常。不过,我相信即使使用双引号,它也是有效的JSON(并且JSONLint也同意这一点)。

我所看到的解决方法是围绕JSON对象与支架,像这样:

({"a":1}) 

,并从浏览器控制台这一工程,但不是当我改变我的服务器的数据(这是响应一个JSONP调用),我也无法在浏览器中更改它,因为我正在使用库(Dojo),并且我没有机会在解析返回数据之前拦截它。

UPDATE

我发现我的服务器代码,在那里我不是在JS功能的JSONP响应包中的数据的错误。这已经解决了这个问题,我随后需要删除这个问题。道歉,谢谢你的回应。

+0

更糟糕的是,我确信这个工作之前,但我不能解释如何或为什么。 – mydoghasworms

+1

请说明你如何解析JSON。对于有效的JSON密钥名称,双引号是_required_,但我认为问题在于您正在执行JSONP调用,因此客户端代码期望看到它可以执行的一些JS。它将{看作是代码块的开始,而不是对象字面的开始,所以当它看到冒号之前它认为它是标签(比如你可以使用continue或break语句) 。将所有东西放在parens中意味着它被解释为一种表达。 JSONP和JSON的工作方式不同。 – nnnnnn

+0

我的歉意,但我发现我的服务器代码中有一个错误,即数据没有被包装在JSONP响应的函数调用中,因为它应该是。作为结果,我将删除此问题。感谢您的时间和精力和解释。 – mydoghasworms

回答

2
{"a": 1} 

独自站在不是json,这是一个block

其中"a":将跳转label继续。而且这样的标签不用"

({"a":1})是一个表达式。并且因此{"a": 1}将被解析为json。

+0

我错误地使用了术语“标签”吗? “关键”是否正确? – mydoghasworms

+0

@mydoghasworms对不起,不能理解你的意思? – Yoshi

+0

在示例{a:1}中,是否称为“键”或“标签”? – mydoghasworms