在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. <div id="outsource_sta_1"></div>  
  3. var myChart = new FusionCharts(fileUrl, "myChartId""600""500");  
  4. myChart.setDataURL(srcUrl);  
  5. myChart.render("outsource_sta_1");  
  6.   
  7. //后端:  
  8. $xml = "<chart palette=\"2\" caption=\"平均处理时间统计\" xAxisName=\"机型\" yAxisName=\"平均处理时间\" showValues=\"1\" decimals=\"2\" formatNumberScale=\"0\" useRoundEdges=\"1\" showPercentValues='1' >";  
  9. for($i = 1; $i < 6; $i++){  
  10.     $data[] = array('label'=>'m'.$i'value'=>$i);  
  11.     $xml .= "<set label=\"'m'.$i\" value=\"$i\" />";  
  12. }  
  13. $xml .= "</chart>";  
  14. print $xml;  

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


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

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


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

批注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. //在上面的基础上  
  9. $return = array('v'=>100,'g'=>$ret.$ret2);  

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值