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