2013-03-26 86 views
1

我使用PHP等服务器端技术生成Highcharts JSON。Javascript字符串作为关闭函数

从浏览器我发送一个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响应,我在双引号取得功能(”“)看到,

我的问题是

  1. 由于这是一个字符串,我不能打电话的功能。

  2. 如果我删除(”“)在PHP随后的jQuery的Ajax抛出一个错误‘无效的JSON或解析错误’

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

有没有办法让我可以遍历JSON对象并将字符串转换为函数以便它会自动调用。

+0

有什么特别的原因,你不只是绑定你的JS代码中的事件处理程序? – Alnitak 2013-03-26 09:57:01

+0

在JSON中传递JavaScript代码也不是一个好的编程实践 – 2013-03-26 10:05:32

+0

@Alnitak我们正在构建服务器端的图表创建,并且我们已经将所有事件处理函数写入了XML文件。我们正在从XML读取事件数据并生成JSON。 – 2013-03-26 10:53:43

回答

0

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

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

+0

这不是一个答案,它应该是一个评论。 – Alnitak 2013-03-26 09:57:27

1

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

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