ECharts通过Ajax动态加载数据到图表

参考官网:http://echarts.baidu.com/echarts2/doc/doc.html#引入ECharts2


要展示的图表像这样:



现在开始前后端代码展示。by the way,使用的开发框架为nutz,重点还是echarts数据。不要本末倒置。


1.从官网下载包


使用其中的dist文件夹和echarts.js,将dist文件夹和echarts.js放在工程的js目录下。


2.前端js代码echartsOneTest.jsp:

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title>统计</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <%@ include file="/WEB-INF/jsp/tag.jsp" %>
    <%@ include file="/WEB-INF/jsp/common_css.jsp" %>
    <%@ include file="/WEB-INF/jsp/common_js.jsp" %>
    <%@ include file="/WEB-INF/jsp/common_tool.jsp" %>
</head>
<body>
    <div>
        <button οnclick="getJson()">查询</button>
    </div>
    <div id="main" style="height:400px;"></div>
    <%--echarts.js的路径可以随便放,只要这里能获取到就行了--%>
    <script src="../../static/js/echarts.js"></script>
    <script type="text/javascript">
        var myChart;//定义一个全局的图表变量,供后面动态加载时使用
        require.config({
            paths: {
                echarts: '../../static/js/dist'   //将dist文件夹和echarts.js放在同一目录下
            }
        });
        require(
            [
                'echarts',
                'echarts/chart/line',   // 按需加载所需图表,如需动态类型切换功能,别忘了同时加载相应图表
                'echarts/chart/bar'
            ],
            function (ec) {
                myChart = ec.init(document.getElementById('main'));
                //下面的option可以为空{},ajax动态添加数据时会加上相应的属性
                //var option = {};
                var option = {
                    legend: {
                        data:['蒸发量','降水量']
                    },
                    xAxis : {
                        data : []
                    },
                    yAxis : {},
                    series : [
                        {
                            name:'蒸发量',
                            type:'bar',
                            data:[]
                        },
                        {
                            name:'降水量',
                            type:'bar',
                            data:[]
                        }
                    ]

                };
                myChart.setOption(option);
            }
        );

        function getJson() {
            //获取数据时显示加载状态图
            myChart.showLoading();
            var months=[];//用来盛放X轴坐标值:月份
            var evapCapacitys=[];//用来盛放Y坐标值:蒸发量
            var precipitations=[];//用来盛放Y坐标值:降雨量

            $.ajax({
                type : "post",
                async : true, //异步请求
                url : "${ctx}/echarts/getJson",
                data : {},
                dataType : "json",
                success : function(result) {
                    if (result.status) {
                        var list = result.list;
                        for(var i=0;i<list.length;i++){
                            months.push(list[i].month);    //遍历月份并填入数组
                        }
                        for(var i=0;i<list.length;i++){
                            evapCapacitys.push(list[i].evapCapacity);    //遍历蒸发量并填入数组
                        }
                        for(var i=0;i<list.length;i++){
                            precipitations.push(list[i].precipitation);    //遍历降水量并填入数组
                        }
                        myChart.hideLoading();    //隐藏加载动画
                        myChart.setOption({        //加载数据图表
                            tooltip : {
                                trigger: 'axis'
                            },
                            legend: {
                                data:['蒸发量','降水量']
                            },
                            toolbox: {
                                show : true,
                                feature : {
                                    mark : {show: true},
                                    dataView : {show: true, readOnly: false},
                                    magicType : {show: true, type: ['line', 'bar']},
                                    restore : {show: true},
                                    saveAsImage : {show: true}
                                }
                            },
                            calculable : true,
                            xAxis: {
                                data: months
                            },
                            yAxis:{},//注意一定不能丢了这个,不然图表Y轴不显示
                            series: [{
                                // 根据名字对应到相应的系列,并且要注明type
                                name: '蒸发量',
                                type:'bar',
                                data: evapCapacitys
                            },{
                                // 根据名字对应到相应的系列,并且要注明type
                                name: '降水量',
                                type:'bar',
                                data: precipitations
                            }]
                        });

                    }

                },
                error : function(errorMsg) {
                    //请求失败时执行该函数
                    alert("图表请求数据失败!");
                    myChart.hideLoading();
                }
            });
        }
    </script>
</body>
</html>


3.后端java代码 ,

EChartsModule.java

package com.kp.module;

import com.kp.entity.EchartsEntity;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by admin on 2017/12/22.
 */
@IocBean
@At("/echarts")
public class EChartsModule {

    @At("/index")
    @Ok("jsp:jsp.echartsOneTest")
    public void index() {

    }

    @At("/getJson")
    @Ok("json")
    public NutMap getJson(){
        NutMap nutMap = new NutMap();
        List<EchartsEntity> list =  new ArrayList<>();
        list.add(new EchartsEntity("1月份",2.0f, 2.6f));
        list.add(new EchartsEntity("2月份",4.9f, 5.9f));
        list.add(new EchartsEntity("3月份",7.0f, 9.0f));
        list.add(new EchartsEntity("4月份",23.2f, 26.4f));


        nutMap.put("list", list);
        nutMap.put("status", "ok");
        return nutMap;
    }

}

EchartsEntity.java

package com.kp.entity;

/**
 * Created by admin on 2017/12/22.
 */
public class EchartsEntity {
    private String month;
    private Float evapCapacity;
    private Float precipitation;

    public EchartsEntity(String month, Float evapCapacity,  Float precipitation) {
        this.month = month;
        this.evapCapacity = evapCapacity;
        this.precipitation = precipitation;
    }

    public String getMonth() {
        return month;
    }

    public void setMonth(String month) {
        this.month = month;
    }

    public Float getEvapCapacity() {
        return evapCapacity;
    }

    public void setEvapCapacity(Float evapCapacity) {
        this.evapCapacity = evapCapacity;
    }

    public Float getPrecipitation() {
        return precipitation;
    }

    public void setPrecipitation(Float precipitation) {
        this.precipitation = precipitation;
    }
}


  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: ECharts 支持通过 ajax 动态数据。具体实现方式如下: 1. 在页面中引入 jQuery 库,用于发送 ajax 请求。 2. 使用 jQuery 的 $.ajax() 方法发送 ajax 请求,获取数据。 3. 在 ajax 请求的 success 回调函数中,使用 echarts 的 setOption() 方法数据。 4. 在 setOption() 方法中配置好 series 数组,并将 ajax 获取到的数据赋值给 series 中的 data 属性。 5. 调用 echarts 的 setOption() 方法更新图表。 示例代码: ``` $.ajax({ type: "GET", url: "data.json", dataType: "json", success: function(data){ myChart.setOption({ series: [{ name: '数据名称', data: data }] }); } }); ``` ### 回答2: echarts是一款基于JavaScript的可视化图表库,它支持多种类型的图表,如折线图、柱状图、饼图等。而ajax是一种异步的http请求方式,它可动态地获取服务器端的数据并在网页上进行展示。在使用echarts时,我们可以通过ajax动态数据,实现数据动态刷新。 首先,我们需要在页面中引入echarts和jquery库。在数据动态前,我们需要先定义一个echarts的容器和基本配置,例如x轴、y轴的数据以及图表的类型等等。然后我们通过jquery库中的ajax方法来向服务器端请求数据。 $.ajax({ type: "GET", //请求方式 url: "数据接口地址", //请求接口 data: {}, //发送到后台的数据 dataType: "json", //接收数据类型 success: function (result) { //成功回调函数 //将获取的数据赋值给echarts数据 myChart.setOption({ series: [ { name: '数据名称', type: '图表类型', data: result //获取的数据 } ] }); }, error: function (result) { //失败回调函数 //请求数据失败的处理 } }); 在上述代码中,通过ajax方法发送请求并获取服务器端的json格式数据,使用success回调函数将获取的数据赋值给echarts数据,以达到动态刷新数据的效果。同时也可以通过设置请求参数data中的数据来查询指定范围内的数据,增强了数据的灵活性。 总体来说,通过ajax动态数据可以让我们的页面更动态化、实时化、灵活化,让我们更好地利用echarts的可视化特性,展示数据中的更多信息。 ### 回答3: ECharts是一款非常强大的可视化图表库,可以通过AJAX动态数据增强用户交互体验。主要利用ECharts的setOption方法实现动态更新数据。实现方法如下: 首先,在HTML页面中引入Echarts库和jQuery库。 ```html <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.9.0/echarts.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> ``` 然后,创建一个div容器,并设置好该容器的宽度和高度,以及一个ID,用于后面创建ECharts实例。 ```html <div id="chart" style="width: 600px;height:400px;"></div> ``` 接着,创建一个Ajax请求,从后台获取数据。 ```javascript $.ajax({ type : "post", url : "your_url", data : {}, dataType : "json", success : function(result) { // result为获取的数据对象,根据需要进行处理 // 调用updateChart方法更新图表 updateChart(result); }, error : function(errorMsg) { alert("ajax请求失败"); } }); ``` 最后,编写一个updateChart方法,用于动态更新图表。 ```javascript function updateChart(data) { // 获取ECharts实例 var myChart = echarts.init(document.getElementById('chart')); // 设置配置项option var option = { // 配置项省略 }; // 更新配置项 myChart.setOption(option, true); } ``` 其中,参数true表示不清除原来的图表,直接在原来的基础上进行更新。 通过以上步骤,我们就可以实现ECHarts动态数据的效果。在实际应用中,可以根据需要对配置项进行更换和调整,实现丰富的数据可视化效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值