Php 编码到JavaScript对象,函数被替换

Php 编码到JavaScript对象,函数被替换,php,javascript,jquery,highcharts,Php,Javascript,Jquery,Highcharts,我对highcharts项目有一个问题,图表选项保存在数据库中。我使用以下代码在图表上打印。让我用一些示例代码来解释我的问题 echo 'var options69 = '.$highcharts_json_options; echo PHP_EOL; echo 'var options69_func = '. json_encode( $functions); echo PHP_EOL; echo '$(document).ready(function() {'; echo PHP_EOL;

我对highcharts项目有一个问题,图表选项保存在数据库中。我使用以下代码在图表上打印。让我用一些示例代码来解释我的问题

echo 'var options69 = '.$highcharts_json_options;
echo PHP_EOL;
echo 'var options69_func = '. json_encode( $functions);
echo PHP_EOL;

echo '$(document).ready(function() {';
echo PHP_EOL;
echo '      chart69 = new Highcharts.Chart( 
                $.extend(true, options69, options69_func) 
            );';
echo PHP_EOL;
echo '});';
问题是,
$functions
无法转换为正确的JavaScript对象。下面是$functions的代码示例

$functions = array(
    'chart' => array(
        'events' => array(
            'click' => "function(){inboxMenu(this.options);}"
        )

    ),
    'tooltip' => array(
        'formatter' => "function(){
            return '<b>'+ this.series.name + ':</b>'+ this.y;
        }"
    )
);
但我需要value
var选项69_func
如下

var options69_func = {
    "chart": {
        "events": {
            "click": function(){
                inboxMenu(this.options);
             }
        }
    },
    "tooltip": {
        "formatter": function(){
            return '<b>'+ this.series.name + ':<\/b>'+ this.y;
        }
    }
}
var选项69_func={
“图表”:{
“事件”:{
“单击”:函数(){
inboxMenu(此为.options);
}
}
},
“工具提示”:{
“格式化程序”:函数(){
返回“+this.series.name+”:“+this.y;
}
}
}
然后只有图表
单击事件
格式化程序
起作用。。这些值动态地来自服务器数据库。我是否可以将回调函数添加到
json\u encode

我将php生成的js代码添加到


我不想使用eval函数。。在客户端

获得选项69_func之后, 如果要执行“单击”功能, 您可以尝试以下方法:
求值(“(“+选项69_函数工具提示.单击+”)“+”();”)

下面是一个如何清理JSON的示例。

var obj={
“图表”:{
“事件”:{
单击“:”(函数(){inbox菜单(this.options);})
}
},
“工具提示”:{
“格式化程序”:“(函数(){return'+this.series.name+':'+this.y;})”
}
};
功能更新(el){
var out={};
$。每个(el,函数(k,o){
如果((el[k]的类型)==“对象”){
out[k]=更新(el[k]);
}如果((评估类型(el[k]))=‘功能’){
out[k]=eval(el[k]);
}否则{
out[k]=el[k];
}
});
返回;
};

但是您必须用
()
s包装匿名函数。

JSON不是javascript。您可以对该字符串运行
eval
,将其转换为js@DavidFregoli如何使
$functions
数组成为
eval
函数的参数?关联数组的递归循环
$functions
?也许这个链接应该对您有所帮助:对不起,没有保存小提琴,现在试试我不喜欢使用eval函数。。在客户端,我不喜欢使用eval函数。。在客户端
var options69_func = {
    "chart": {
        "events": {
            "click": function(){
                inboxMenu(this.options);
             }
        }
    },
    "tooltip": {
        "formatter": function(){
            return '<b>'+ this.series.name + ':<\/b>'+ this.y;
        }
    }
}
var obj = {
"chart": {
    "events": {
        "click": "(function(){inboxMenu(this.options);})"
    }
},
"tooltip": {
    "formatter": "(function(){return '<b>'+ this.series.name + ':<\/b>'+ this.y;})"
}
};

function update( el ) {
var out = {};
$.each(el, function(k, o) {
    if ( (typeof el[k]) === 'object' ) {
        out[k] = update( el[k] );
    } else if ( ( typeof eval(el[k]) ) === 'function' ) {
        out[k] = eval( el[k] );
    } else {
        out[k] = el[k];
    }
});
return out;
};