2010-04-19 64 views
2

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代碼塊中的情況感興趣。就像上面的例子。

回答

2

根據JSON.org,一個JSON對象只支持對象的下列值成員:

alt text http://json.org/value.gif

因爲這些都不是一個功能,我建議不使用它,因爲,正如你說,這是不是在規範正式支持。

此外,當非JavaScript客戶端(如Python程序)嘗試消耗你的JSON會發生什麼?它如何運行你的JavaScript代碼?

+0

如果我用它只是數據,其中目標解析器將最有可能不能是瀏覽器,那麼我會同意你的看法。但是我問在哪裏,我在我的JavaScript客戶端代碼直接嵌入JavaScript的場景。它將由瀏覽器執行。 – 2010-04-19 13:17:45