2010-04-19 62 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