我使用像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中看到的那样,我使用双引号(“”),
来获取函数我的问题是
由于这是一个字符串,我无法将其作为函数调用。
如果我在PHP中删除(“”)那么jQuery Ajax会将错误引发为“无效的JSON或分析错误”
我不允许使用eval(),因为这不是一个好的编程习惯。
有没有办法可以迭代JSON对象并将字符串转换为函数,以便自动调用它。
答案 0 :(得分:1)
您要做的是eval()
所以请使用它。您想要执行从服务器发送的未知代码。无论你尝试什么方法,最后你都会像eval()
那样做。
如果您确定,您发送的代码没问题,使用它没有任何害处。
答案 1 :(得分:0)
eval()
就是你想要的,这是唯一的方法。
为什么不允许你使用它?它并不像它描绘的那样邪恶,在这种情况下它很好。如果您使用解决方法,则基本上会重写eval()
。
答案 2 :(得分:0)
在JSON中,您无法添加函数定义,但请查看:https://groups.google.com/forum/?fromgroups=#!topic/json-schema/7f5Wd5yRluo可能会有所帮助。