Javascript字符串作为闭包函数

时间:2013-03-26 09:54:01

标签: javascript jquery json twitter-bootstrap highcharts

我使用像PHP这样的服务器端技术生成Highcharts JSON。

从浏览器我发送一个AJAX请求来获取完整的Highcharts JSON,然后渲染它。

例如,我的AJAX响应是

    [
   {
      "plotOptions":{
         "enabled":false,
         "series":{
            "stacking":"",
            "point":{
               "events":{
                  "click":"function(e){console.log(e.point.config); console.log(e.point.category)}"
               }
            }
         }
      },
      "chart":{
         "type":"column",
         "renderTo":"leftTopContainer",
         "polar":false
      },
      "series":[
         {
            "name":"netpos",
            "data":[6700,8200,11500]
         }
      ],
      "title":{
         "text":"Future Financial Commitments-5Y Yr View"
      },
      "xAxis":{
         "categories":["2010","2011","2012"]
      }
   }
]; 

获得服务器端响应后,我正在使用以下代码

进行渲染
new Highcharts.Chart(responseData);

除了事件

之外,一切正常
    "events":{
    "click":"function(e){console.log(e.point.config); console.log(e.point.category)}"
               }

正如您在JSON Response中看到的那样,我使用双引号(“”),

来获取函数

我的问题是

  1. 由于这是一个字符串,我无法将其作为函数调用。

  2. 如果我在PHP中删除(“”)那么jQuery Ajax会将错误引发为“无效的JSON或分析错误”

  3. 我不允许使用eval(),因为这不是一个好的编程习惯。

  4. 有没有办法可以迭代JSON对象并将字符串转换为函数,以便自动调用它。

3 个答案:

答案 0 :(得分:1)

您要做的是eval()所以请使用它。您想要执行从服务器发送的未知代码。无论你尝试什么方法,最后你都会像eval()那样做。

如果您确定,您发送的代码没问题,使用它没有任何害处。

答案 1 :(得分:0)

eval()就是你想要的,这是唯一的方法。

为什么不允许你使用它?它并不像它描绘的那样邪恶,在这种情况下它很好。如果您使用解决方法,则基本上会重写eval()

答案 2 :(得分:0)

在JSON中,您无法添加函数定义,但请查看:https://groups.google.com/forum/?fromgroups=#!topic/json-schema/7f5Wd5yRluo可能会有所帮助。