看似复杂的功能,其实只是利用了PHP、Ajax及FusionCharts的基本的方法。
总结其实现过程: Ajax请求PHP页面查询数据,PHP将所需数据生成JSON数组传回Ajax,再写入页面对应位置,再由FusionCharts重新加载Flash图表。
这样做的好处是实现定时异步传输数据并最终展现出来。
对于FusionCharts不了解的请谷歌之。这里需要下载FusionCharts的安装文件(官方地址:www.fusioncharts.com ),包括FusionCharts.js、加载XML数据的FusionCharts.php文件,还有所需的SWF文件,一个Flash文件对应一个展示效果,效果多种多样,各取所需,总有一款适合你。详细的安装使用教程,这里就不赘述鸟,当然,如果需要,请留言 😛
不多说,上代码:
function get_data(){ var params = new Object(); //赋值变量 $.ajax({ type: "POST", url: "index.php?app=app&act=act", data: params, async : false, success: function(msg){ if(msg != ""){ var jsonobj = eval('('+msg+')'); $("#chartdiv1").html(jsonobj. amount_xml); //不要把对应的内容放错地方 $("#chartdiv2").html(jsonobj. orders_xml); } } }); }
这个都是基本的Ajax框架,不必多说。
实现定时读取数据的方法很多,这里简单提两种:
- setInterval方法:
body中添加JS代码:
<script type="text/javascript"> //定时刷新数据 setInterval('get_data()',30000);//设定5分钟刷新数据 </script>
- 前一方法的升级:
利用setInterval函数定时访问本地时间,如到一定时间,则请求PHP页面传回数据。
指定每天9点、12点整刷新数据:
function get_time(){ var now = new Date(), var hour = now.getHours(), var minutes = now.getMinutes(), var seconds = now.getSeconds() if(hour == 9 && minutes == 00 && seconds < 30){ setTimeout('get_data()',500); }else if(hour == 12 && minutes == 00 && seconds < 30){ setTimeout('get_data()',500); } }
PHP部分:需要仔细研究FusionCharts对应XML数据,测试时,可先将数据写进XML文件中,修改参数,如Flash图表大小、颜色等等。
<graph xaxisname='Continent' yaxisname='Export' hovercapbg='DEDEBE' hovercapborder='889E6D' rotateNames='0' yAxisMaxValue='100' numdivlines='9' divLineColor='CCCCCC' divLineAlpha='80' decimalPrecision='0' showAlternateHGridColor='1' AlternateHGridAlpha='30' AlternateHGridColor='CCCCCC' caption='Global Export' subcaption='In Millions Tonnes per annum pr Hectare' > <categories font='Arial' fontSize='11' fontColor='000000'> <category name='N. America' hoverText='North America'/> <category name='Asia' /> …… </categories> <dataset seriesname='Rice' color='FDC12E'> <set value='30' /> <set value='26' /> <set value='29' /> <set value='31' /> <set value='34' /> </dataset> …… </graph>
<graph>是root元素,它还有一些属性,用来定义标题,坐标轴,数值格式。<set>元素,用来描述数据。name属性用来表示数据类别名称,value属性表示数据,color属性表示图形颜色。
PHP要做的就是把数据写成对应的XML格式,注意在写入数据时,多余的空格或许会影响最终的输出,然后用json_encode输出JSON数组,最后别忘了echo。
$json_arr = array( " amount_xml" => $amount_xml, " orders_xml" => $orders_xml ); $json = json_encode($json_arr); echo $json;
这里使用的是数组,没错,这样,我们可以一次更新多个表格的数据!
效果很不错
支持下