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


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'

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

Author: halfer, 2013-05-22

2 answers

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

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

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

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

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

 2
Author: Rob Johnstone, 2013-05-22 18:51:43

Я решил возвращать данные рядов только для круговой диаграммы... вместо всего массива конфигураций highchart... Варианты построения теперь определены в javascript и не возвращаются массивом PHP, закодированным в json_encoded..

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

 0
Author: Mr. Meeseeks, 2013-05-28 16:32:38