在php中使用FusionCharts

数据格式有setDataURL(srcUrl)和setJSONData(jsonStr)两种
用法在官方demo和document都有详细解释。
在实际需求中,直接参考官方资料还是挺方便的。


fileUrl = '../path/to/xx.swf'; //swf文件路径
srcUrl = 'http://url?a=1&b=2'; //向后端请求的url。

一、setDataURL(srcUrl)方式
Php代码 收藏代码
  1. //前端:
  2. <divid="outsource_sta_1"></div>
  3. varmyChart=newFusionCharts(fileUrl,"myChartId","600","500");
  4. myChart.setDataURL(srcUrl);
  5. myChart.render("outsource_sta_1");
  6. //后端:
  7. $xml="<chartpalette=\"2\"caption=\"平均处理时间统计\"xAxisName=\"机型\"yAxisName=\"平均处理时间\"showValues=\"1\"decimals=\"2\"formatNumberScale=\"0\"useRoundEdges=\"1\"showPercentValues='1'>";
  8. for($i=1;$i<6;$i++){
  9. $data[]=array('label'=>'m'.$i,'value'=>$i);
  10. $xml.="<setlabel=\"'m'.$i\"value=\"$i\"/>";
  11. }
  12. $xml.="</chart>";
  13. print$xml;

批注1:本质是data.xml,可以直接丢一个data.xml格式的文件,也可以是一个url,该url的返回值是xml格式的数据。
批注2:有可能乱码。在yii中使用会乱码。但在extjs中没有。


二、setJSONData(jsonStr)
又分两种情况:
第一种情况是new FusionCharts(...)在前端,仅jsonStr从后端获取
例如:
Php代码 收藏代码
  1. //前端:
  2. <divid="outsource_sta_1"></div>
  3. $.post(srcUrl,null,function(r){
  4. varmyChart=newFusionCharts(fileUrl,"myChartId","600","500");
  5. myChart.setJSONData(r);
  6. myChart.render("outsource_sta_1");
  7. },'json');
  8. //后端:
  9. $data=array();
  10. for($i=1;$i<6;$i++){
  11. $data[]=array('label'=>'m'.$i,'value'=>$i);
  12. }
  13. $chart=array();
  14. $chart['palette']=2;
  15. $chart['caption']="平均处理时间统计";
  16. $chart['xAxisName']="机型";
  17. $chart['yAxisName']="平均处理时间";
  18. $chart['showValues']=1;
  19. $chart['decimals']=2;
  20. $chart['formatNumberScale']=0;
  21. $chart['useRoundEdges']=1;
  22. $chart['showPercentValues']=1;
  23. $ret=array('chart'=>$chart,'data'=>$data);
  24. printjson_encode($ret);

批注:$.post()的返回值是'json'类型。


第二种情况是所有都在后端,前端直接$(".outsource_content").html(r)
Php代码 收藏代码
  1. //前端:
  2. <divid="outsource_sta_1"></div>
  3. $.post(srcUrl,null,function(r){
  4. $(".outsource_content").html(r);
  5. },'html');
  6. //后端:
  7. $data=array();
  8. for($i=1;$i<6;$i++){
  9. $data[]=array('label'=>'m'.$i,'value'=>$i);
  10. }
  11. $chart=array();
  12. $chart['palette']=2;
  13. $chart['caption']="平均处理时间统计";
  14. $chart['xAxisName']="机型";
  15. $chart['yAxisName']="平均处理时间";
  16. $chart['showValues']=1;
  17. $chart['decimals']=2;
  18. $chart['formatNumberScale']=0;
  19. $chart['useRoundEdges']=1;
  20. $chart['showPercentValues']=1;
  21. $ret=array('chart'=>$chart,'data'=>$data);
  22. $ret=json_encode($ret);
  23. $ret=self::generateChart('Column2D',$ret,600,500,'myid1','outsource_sta_1');
  24. $ret=self::wrapScript($ret);
  25. print$ret;
  26. publicstaticfunctionwrapScript($scripts){
  27. $html='<scripttype="text/javascript">';
  28. $html.="\n";
  29. $html.=$scripts;
  30. $html.="\n";
  31. $html.="</script>";
  32. return$html;
  33. }
  34. publicstaticfunctiongenerateChart($type,$data,$width=0,$height=0,$myid='',$div_id=''){
  35. if(!$type||!$data){
  36. return'';
  37. }
  38. $width=intval($width)?intval($width):800;
  39. $height=intval($height)?intval($height):400;
  40. $width=$width<600?600:$width;
  41. $height=$height<400?400:$height;
  42. $url=Yii::app()->baseUrl."/resources/fusion/{$type}.swf";
  43. $mychartid=$myid.'a';
  44. $script=<<<JAVASCRIPT
  45. var{$myid}=newFusionCharts('{$url}','{$mychartid}','{$width}','{$height}');
  46. {$myid}.setJSONData('{$data}');
  47. {$myid}.render('{$div_id}');
  48. JAVASCRIPT;
  49. return$script;
  50. }

批注1:$.post()的返回值是'html'类型。也可以测试其他类型是否可以正常显示。
但是不能是json格式。其本质是一些已经组建好的javascript,添加到制定div后就立即执行了。

批注2:针对第二种情况,也可以显示两个图表,(当然也可以显示多个)
<div id="outsource_sta_1"></div>
<div id="outsource_sta_2"></div>
后端在添加:
Php代码 收藏代码
  1. $ret2=$ret;
  2. $ret2=self::generateChart('Column2D',$ret2,600,500,'myid2','outsource_sta_2');
  3. $ret2=self::wrapScript($ret2);
  4. print$ret.$ret2;



三、setJSONData()的高级形式
高级的原因是:后端不只是传来渲染图表(fusionCharts)的完整js,还包括其他值,此时$.post()的返回值是'json'类型。
Php代码 收藏代码
  1. //前端:
  2. $.post(srcUrl,null,function(r){
  3. console.log(r.v);
  4. $(".outsource_content").html(r.g);
  5. },'json');
  6. //后端:
  7. //在上面的基础上
  8. $return=array('v'=>100,'g'=>$ret.$ret2);

批注1:100的位置可以放置任意负责的数据,而且还可以v1,v2等等。

批注2:此时$.post()的返回值是'json'类型。这个必须强调。

你可能感兴趣的:(FusionCharts)