2013-05-22 2 views
3

РНР - это часть массива конфигурации Highchart, который возвращается функцией PHP (который json_encoded)Передача функции JavaScript из JSON закодированный РНР

'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' 

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

+0

Почему вы используете двойные кавычки и одинарные кавычки везде? – nifr

+0

Итак, вы пытаетесь передать Javascript-функцию скрипту PHP? или наоборот? – thatidiotguy

+0

@nifr Обратите внимание, что в функции есть одинарные кавычки? Я должен был бы избежать одиночных кавычек внутри, чтобы использовать одинарные кавычки, чтобы обернуть его. –

ответ

2

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

функция включена в JSON является строкой, поэтому вам нужно оценить его:

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

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

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

+0

Использование eval вызвало следующее сообщение об ошибке: «Uncaught SyntaxError: Неожиданный токен (« ... который заставляет меня думать, что он не может оценивать неназванные функции. В любом случае, я не собираюсь передавать строку для функции ... I 'просто передаю другие данные и использую javascript для настройки конфигурации –

+0

Я забыл окружить строку в круглых скобках - они необходимы, чтобы eval знал, что она оценивает выражение. Я обновил свой ответ соответственно –

0

Я решил вернуть только данные серии для пирога highchart ... вместо того, чтобы весь массив конфигурации highchart ... plotOptions теперь определены в JavaScript и не возвращенного json_encoded PHP массив ..

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

Смежные вопросы