ECharts+Ajax动态制图
来源:互联网 发布:淘宝 红钻 蓝钻 编辑:程序博客网 时间:2024/06/06 03:04
今天自己在做小东西的时候,需要一个功能,需要接收数据库的记录并显示在柱状图上,以前写过一次但是没总结,下面我总结一下实现过程。
一、准备js
下载ECharts的js文档,导入在项目中。这里也准备了链接http://echarts.baidu.com/download.html
二、实现
SpringMVC后台获取数据
1.Controller控制层调用service业务层
/** * @ResponseBody:返回JSON格式内容 * @RequestMapping("/findNgMonth/{ngMonth}"):映射路径,即ajax请求的url地址 * */ @ResponseBody @RequestMapping(value = "/findNgMonth/{ngMonth}",produces = "text/html;charset=UTF-8",method = RequestMethod.GET) public String findNgMonth(@PathVariable("ngMonth")String ngMonth)throws Exception{ List<NgBills> ngBillsList=null; try{ System.out.println("获取日期:"+ngMonth); //调用service业务层的findNgMonth()方法 ngBillsList=billsService.findNgMonth(ngMonth); //返回结果 return JSON.toJSONString(ngBillsList); }catch (ExceptionCountents ec){ ec.printStackTrace(); return "查找失败!"; } }
2.service业务层调用Dao层
@Transactional@SuppressWarnings("unchecked")public List<NgBills> findNgMonth(String ngMonth)throws Exception{ //调用Dao层中的findNgMonth方法,并返回一个List集合 return billsDAO.findNgMonth(ngMonth);}
3.Dao层查询数据库
@SuppressWarnings("unchecked") public List<NgBills> findNgMonth(String ngMonth)throws ExceptionCountents { //编写hibernate语句,模糊查找,并把返回结果按时间升序排列 String hql="FROM NgBills ng where ng.ngTime like'%"+ngMonth+"%' order by ng.ngTime asc "; //执行查找 Query query = entityManager.createQuery(hql); //返回List集合 return query.getResultList(); }
到此数据已经得到了。
制图
准备一个div,规定高宽,用于放置柱状图
<div id="TImgNgBills" class="panel-body panel-collapse collapse in" style="width: 1100px;height: 500px;"></div>
1.button点击触发
$("#ngMonthBtn").click(function () { //触发事件,调用getMonthData函数 getMonthData();});
2.ajax获取后台数据
function getMonthData() { $.ajax({ url: 'findNgMonth/'+'2017-07', type: 'GET', contentType: "application/json;charset-utf-8", dataType: 'json', data: {}, success: function (result) { if(result.length==0){ alert("本月暂无记录!"); }else{ var xValue=[]; var yValue=[]; for (var i = 0; i < result.length; i++) { //取出x轴--时间 xValue.push(result[i].ngTime); } for (var i = 0; i < result.length; i++) { //取出y轴--数据 yValue.push(result[i].ngNTotalMoney); } //调用制表函数,并把获取到的值传递过去 getChart(xValue,yValue); } } });}
3.使用ECharts制图
function getChart(xValue,yValue){ //div初始化 var myChart=echarts.init(document.getElementById('TImgNgBills')); var option = { title: { text: '当月记录柱状图' }, color: ['#3398DB'], tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, //x横轴 xAxis: [ { type: 'category', //data值为ajax传递过来的值 data :xValue, axisTick: { alignWithLabel: true } } ], yAxis: {}, series: [ { name: '当月未收(元)', type: 'bar', barWidth: '40%', data: yValue, //鼠标放在柱状图上面时,显示数值 itemStyle: { normal: { label: { show: true, position:'top' } } } } ] }; //清除上一次数据缓存 myChart.clear(); //开始制图 myChart.setOption(option);}
到此整个流程就走完了,下面可以看一下效果图
三、问题
1.在制作图表的时候,不会清空上一次数据值,而是直接在上次图后面继续增加数据,网上百度很多都是在 myChart.setOption(option);调用之前使用 myChart.clear();清除缓存,这个也就是常见的解决方法。而有些时候,例如我这一次,使用这个方法没有效果,也就意味着问题根源不是出在制图这里。经过alert仔细排查,最后发现,出现问题是下面这里:
var xValue=[];var yValue=[];xValue.push();yValue.push();
官方解释:push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。意味着我们在赋值的时候,并没有清空上一次的值,而是直接在后面添加。
解决:在每个需要赋值的地方,重新var一次。
这个问题比较偏,不是常见问题,我先记录在这里,后面有另外解决方法也可继续添加进来。
阅读全文
0 0
- ECharts+Ajax动态制图
- echarts ajax 动态获取数据
- ajax动态赋值Echarts地图
- echarts ajax动态调用数据
- Echarts ajax动态加载json数据
- echarts结合ajax动态获取数据库数据
- Echarts图表通过Ajax动态更新数据
- Echarts结合Ajax的动态图表(1)
- Ajax实现Echarts动态数据加载
- Echarts通过Ajax实现动态数据加载
- Echarts -- 条件查询ajax动态获取数据
- ECharts画动态仪表盘+柱状图(ajax获取+循环画图)
- echarts+java+ajax实现动态线状图实例
- AngularJS+Echarts利用Ajax实现数据动态刷新
- ajax动态赋值echarts(饼图和柱形图)
- echarts折线图,使用ajax动态加载数据
- ECharts通过Ajax动态加载数据到图表
- echarts showloading ajax不起作用
- watchdog杀死system_server导致系统重启问题分析流程
- android 添加到购物车动画
- css04小知识点
- P、*P和&P三者的区别
- 64. Minimum Path Sum--找路径最小和
- ECharts+Ajax动态制图
- Linux基础(一)(2)简单shell命令
- CI中的site_url和base_url的自我总结
- RecyclerView的使用
- OpenCV学习--Mat::rowRange函数
- 二叉树的非递归遍历
- HTTP请求的知识点
- C#多线程介绍及编程
- 初涉LeNet5处理mnist (CNN卷积神经网络)