在php中使用fusioncharts
作者:zccst
数据格式有setdataurl(srcurl)和setjsondata(jsonstr)两种
用法在官方demo和document都有详细解释。
在实际需求中,直接参考官方资料还是挺方便的。
fileurl = '../path/to/xx.swf'; //swf文件路径
srcurl = 'http://url?a=1&b=2'; //向后端请求的url。
一、setdataurl(srcurl)方式
//前端:
var mychart = new fusioncharts(fileurl, mychartid, 600, 500);mychart.setdataurl(srcurl);mychart.render(outsource_sta_1);//后端:$xml = ;for($i = 1; $i 'm'.$i, 'value'=>$i); $xml .= ;}$xml .= ;print $xml;
批注1:本质是data.xml,可以直接丢一个data.xml格式的文件,也可以是一个url,该url的返回值是xml格式的数据。
批注2:有可能乱码。在yii中使用会乱码。但在extjs中没有。
二、setjsondata(jsonstr)
又分两种情况:
第一种情况是new fusioncharts(...)在前端,仅jsonstr从后端获取
例如:
//前端:
$.post(srcurl,null,function(r){ var mychart = new fusioncharts(fileurl, mychartid, 600, 500); mychart.setjsondata(r); mychart.render(outsource_sta_1);},'json');//后端:$data = array();for($i = 1; $i 'm'.$i, 'value'=>$i);}$chart = array();$chart['palette'] = 2;$chart['caption'] = 平均处理时间统计;$chart['xaxisname'] = 机型;$chart['yaxisname'] = 平均处理时间;$chart['showvalues'] = 1;$chart['decimals'] = 2;$chart['formatnumberscale'] = 0;$chart['useroundedges'] = 1;$chart['showpercentvalues'] = 1;$ret = array('chart'=>$chart,'data'=>$data);print json_encode($ret);
批注:$.post()的返回值是'json'类型。
第二种情况是所有都在后端,前端直接$(.outsource_content).html(r)
//前端:
$.post(srcurl,null,function(r){ $(.outsource_content).html(r);},'html');//后端:$data = array();for($i = 1; $i 'm'.$i, 'value'=>$i);}$chart = array();$chart['palette'] = 2;$chart['caption'] = 平均处理时间统计;$chart['xaxisname'] = 机型;$chart['yaxisname'] = 平均处理时间;$chart['showvalues'] = 1;$chart['decimals'] = 2;$chart['formatnumberscale'] = 0;$chart['useroundedges'] = 1;$chart['showpercentvalues'] = 1;$ret = array('chart'=>$chart,'data'=>$data);$ret = json_encode($ret);$ret = self::generatechart('column2d',$ret, 600,500, 'myid1', 'outsource_sta_1');$ret = self::wrapscript($ret);print $ret;public static function wrapscript($scripts){ $html = '; return $html;}public static function generatechart($type, $data, $width=0, $height=0, $myid='', $div_id=''){ if(!$type || !$data){ return ''; } $width = intval($width)?intval($width):800; $height = intval($height)?intval($height):400; $width = $width<600?600:$width; $height = $heightbaseurl . /resources/fusion/{$type}.swf; $mychartid = $myid . 'a'; $script = <$ret.$ret2);
批注1:100的位置可以放置任意负责的数据,而且还可以v1,v2等等。
批注2:此时$.post()的返回值是'json'类型。这个必须强调。