2010-07-02 78 views
2

我有一個簡單的getJSON請求:

$.getJSON('JsonTest', function(o) { 
alert(o.Test); 
}); 

它的工作原理,但在Firebug的「O」永遠不會變成一個對象,但保持一個字符串:

{"Test":"Hello"} 

如果我做一個

eval('(' + o + ')') 

它被評價很好,我能想到的唯一的事情是,有某種形式的跨站點腳本proble的m,但是我在我的開發機器上運行了所有東西,JsonTest關閉了本地主機:端口/控制器/ JsonTest

關於什麼可能是錯誤的任何想法?如何檢查是否是跨站點問題?任何其他想法?

回答

2

您的JsonTest服務可能會「雙重轉義」發回的json嗎?如:

"{\"Test\":\"Hello\"}"

既然你有螢火蟲,你能看一看響應並粘貼它顯示了原始文本?

如果你的服務方法返回一個字符串,並且你正在做你自己的序列化,那麼這肯定是這種情況。我最近碰到了這個。無論如何,與「雙引號」(或雙包裹,雙重逃脫,無論你想調用它)json回來,$ .getJSON()只有eval()的一次,將"{\"Test\":\"Hello\"}"變成{"Test":"Hello"},這確實仍然需要額外的eval()。

另外,不要使用eval()。使用JSON.parse()。您可以包含http://json.org/中的json2.js,而JSON.parse()將使用瀏覽器的本機json解析功能,或者如果瀏覽器本身不執行,則會退回到json2.js。

+0

@Reigel:感謝您對變革的關注。 – 2010-07-02 02:08:32

+0

你是對的!哦,我的上帝,整個下午都在這!我正在做一個公共JsonResult()...返回Json(TestJson)...並且之間是手工序列化(長篇故事),所以當我調用Json時,它會再次序列化。哇,今天下午。這解釋了爲什麼我的其他JsonResults工作正常。哇,再次感謝。 – 2010-07-02 02:20:00

+0

你很幸運,你只花* 1 *下午,哈哈。我認爲這花了我2 ;-) – 2010-07-02 02:26:50