2011-11-28 86 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