2013-05-22 2 views
3

PHP - 이것은 (json_encoded되는)은 PHP 함수에 의해 리턴 된 Highchart 구성 배열의 일부부호화 JSON에서 자바 스크립트 함수를 전달 PHP

'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 +' %' }" 
     ) 
    ) 
) 

자바 스크립트 - 인코딩 된 데이터

에서 정보에 접근
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

그래서 자바 스크립트 함수를 PHP 스크립트에 전달하려고합니까? 혹은 그 반대로도? – thatidiotguy

+0

@nifr 함수에 작은 따옴표가있는 것에주의하십시오. 작은 따옴표를 사용하여 묶으려면 내부의 작은 따옴표를 이스케이프 처리해야합니다. –

답변

2

원격 소스에서 자바 스크립트를 실행하는 것은 신뢰할 수 없으므로 나쁜 생각입니다. 당신이해야하는 경우에는 :이 기능은 JSON에 포함

문자열 그러므로 당신은 그것을 평가해야합니다

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

변환 할 필요가있는 객체의 각 방법에 대해.

그러나 시작 부분에서 말한 것처럼 거의 확실하게이 방법으로 자바 스크립트를 가져올 필요가없는 솔루션이 있습니다.

+0

eval을 사용하면 다음과 같은 오류가 발생했습니다. "잡히지 않은 SyntaxError : 예기치 않은 토큰 ("... 내게 이름없는 함수를 평가할 수 없다고 생각하게 만듭니다. 어느 쪽이든, 함수에 문자열을 전달하지 않을 것입니다 ... –

+0

괄호 안의 문자열을 감싸는 것을 잊어 버렸습니다 - 이것들은 eval이 표현식을 평가한다는 것을 알기 위해서 필요합니다. 그에 대한 답변을 적절하게 업데이트했습니다. –

0

난 단지 대신 plotOptions 이제 자바 스크립트에서 정의하고 json_encoded PHP 배열 ..에 의해 반환되지 않습니다 ... 전체 highchart 구성 배열 ... 파이 highchart에 대한 일련의 데이터를 반환하기로 결정했습니다

나는 왜 그런 짓을하고 있었는지 확신 할 수는 없지만 eval을 가진 모든 도움에 감사드립니다!

관련 문제