Передача функции 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'
Как мне изменить это, чтобы он распознал это как функцию? Или это вообще возможно?
2 answers
Выполнение javascript из удаленного источника - плохая идея, так как вы не можете ему доверять. Однако, если вам необходимо:
Функция, включенная в json, является строкой, поэтому вам необходимо ее оценить:
pie.dataLabels.formatter = eval('('+pie.dataLabels.formatter+')');
Для каждого метода объекта, который необходимо преобразовать.
Однако, как было сказано в начале, почти наверняка существует решение, которое не требует, чтобы вы извлекали javascript таким образом.
Я решил возвращать данные рядов только для круговой диаграммы... вместо всего массива конфигураций highchart... Варианты построения теперь определены в javascript и не возвращаются массивом PHP, закодированным в json_encoded..
Я не совсем уверен, зачем я это делал, но спасибо за всю помощь с eval!