2013-02-16 156 views
1

我的Ajax請求不返回這個結果(通常是一個有效的JSON字符串):爲什麼這個有效的JSON字符串不會生效?

{"status":"ERROR","message":"Errore: Ti prego di inserire la domanda!"} 

這是響應頭:

Connection:Keep-Alive 
Content-Length:80 
Content-Type:application/json; charset=utf-8 
Date:Sat, 16 Feb 2013 10:02:18 GMT 
Keep-Alive:timeout=5, max=97 
Server:Apache/2.2.21 (Win32) PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 
X-Powered-By:PHP/5.3.8 

當我直接複製/粘貼JSON-字符串從瀏覽器控制檯傳遞到像http://jsonlint.com這樣的JSON解析器,結果爲「意外的令牌」。爲什麼?

我已經重寫相同的字符串在文本編輯器也測試了它 - 當然這一個結果「有效」 ......

回答

2

就像你說的,你報什麼是有效的JSON。我希望你在那裏有一個或多個「隱形」角色造成問題。 (它/它們不存在於你的問題中,複製和粘貼給出了「有效」的結果。)通常,當我們看到這個問題時就是這樣。

這是由Context-Length標題確認的。它表示內容的長度爲80,但JSON中只有71個字符,其中沒有一個是UTF-8中的多字節字符。所以我會傾向於懷疑無效的無形字符,可能在響應的開頭或結尾。如果您在http://jsonlint.com上粘貼導致問題的相同字符串到基本文本編輯器中,您應該能夠找到它們;通常他們會顯示爲有趣的符號。

+1

非常感謝!你是對的,有無形的角色。一個簡單的ob_end_clean()解決了它:)謝謝! – MonsJovis 2013-02-16 10:37:50

+0

@MonsJovis:非常好,很高興幫助! – 2013-02-16 10:40:37

+0

不可見字符是字節順序標記。我考慮閱讀: http://de.wikipedia.org/wiki/Byte_Order_Mark http://stackoverflow.com/questions/3589358/fix-incorrectly-displayed-encoding-on-an-html-document-with- PHP – MonsJovis 2013-02-16 14:44:02