1

我正在使用 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 响应中看到的那样,我在双引号(“”)中得到了函数,

我的问题是

  1. 由于这是一个字符串,我不能将其称为函数。

  2. 如果我在 PHP 中删除 (" "),则 jQuery Ajax 会抛出错误为“无效 JSON 或解析错误”

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

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

4

3 回答 3

1

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

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

于 2013-03-26T09:57:37.300 回答
0

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

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

于 2013-03-26T09:56:47.057 回答
0

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

于 2013-03-26T13:22:33.067 回答