JSON是將我的服務器端代碼中的複雜數據傳遞給客戶端JavaScript的好方法。例如,在PHP我可以寫:在JSON安全中使用高級構造(函數,新函數調用)嗎?
<script type="text/javascript>
var MyComplexVariable = <?= BigFancyObjectGraph.GetJSON() ?>;
DoMagic(MyComplexVariable);
</script>
這是很酷,但有時你想傳遞超過基礎數據,如日期,甚至函數的定義。還有一個簡單直接的方法,比如:
<script type="text/javascript>
var MyComplexVariable = {
'SimpleProperty' : 42,
'FunctionProperty' : function()
{
return 6*7;
},
'DateProperty' : new Date(989539200000),
'ArbitraryProperty' : GetTheMeaningOfLifeUniverseAndEverything()
};
DoMagic(MyComplexVariable);
</script>
而且這個功能在我目前爲止所見過的所有瀏覽器中都很有用。但根據JSON.org這樣的語法是無效的。另一方面,我已經看到這個語法在很多地方被使用,包括一些流行的JavaScript框架。所以......
我可以想到的任何問題,如果我用「不支持」 JSON的功能,比如上面?爲什麼它是錯的?
新增澄清:如果我希望我的JSON由一些不知名的第三方軟件被消耗掉,甚至已知解析器不是一個瀏覽器,那麼這樣的外來確實將很有可能無法正常工作,我不會試圖嵌入它們。但是我對JSON代碼直接寫入由Internet瀏覽器執行的JavaScript代碼塊中的情況感興趣。就像上面的例子。
如果我用它只是數據,其中目標解析器將最有可能不能是瀏覽器,那麼我會同意你的看法。但是我問在哪裏,我在我的JavaScript客戶端代碼直接嵌入JavaScript的場景。它將由瀏覽器執行。 – 2010-04-19 13:17:45