Передача функции JavaScript из JSON-кодированного PHP

PHP. Это часть массива конфигурации Highchart, возвращаемого функцией PHP (которая является json_encoded)

'plotOptions' => array( 'pie' => array( 'allowPointSelect' => TRUE, 'cursor' => 'pointer', 'dataLabels' => array( 'enabled' => TRUE, 'color' => '#000000', 'connectorColor' => '#000000', 'formatter' => "function() { return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %' }" ) ) ) 

JavaScript – доступ к этой информации из кодированных данных

 container.highcharts(r.hc); // r.hc is the array that contains the highchart information above 

Проблема, с которой я сталкиваюсь:

 Uncaught TypeError: Object function() { return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %' } has no method 'call' 

Как изменить это, чтобы он распознал его как функцию? Или это даже возможно?

Выполнение javascript из удаленного источника – плохая идея, так как вы не можете доверять ей. Однако, если вам необходимо:

Функция, включенная в json, является строкой, поэтому вам необходимо ее оценить:

  pie.dataLabels.formatter = eval('('+pie.dataLabels.formatter+')'); 

для каждого метода объекта, который необходимо преобразовать.

Однако, как сказано в начале, существует почти наверняка решение, которое не требует от вас загрузки javascript таким образом.

Я решил только возвратить данные серии для highchart pie … вместо всего массива конфигурации highchart … plotOptions теперь определены в javascript и не возвращены json_encoded PHP-массивом.

Я не слишком уверен, почему я это делаю, но спасибо за всю помощь с eval!