Echarts通过Ajax动态获取后端数据(条形图、饼图)


   https://blog.csdn.net/echo_1510/article/details/105484848

1 饼图

1.1 后端-Controller层

传的是List型数据

     /**
     * 按客户所在城市统计————饼图
     * @param model
     * @return
     */
    @RequestMapping("/show")
    @ResponseBody
    public List show(Model model) {
        List echartsList = clientService.getCity();
        System.out.println("echartsList:"+echartsList.get(1).getName());
        return echartsList;
    }
    
    @RequestMapping("/showCity")
    public String showCity() {
        return "showCity";
    }

1.2 前端

showCity.html

需要引入

        <script type="text/javascript">
            //基于准备好的dom,初始化echarts实例
                    var myChart = echarts.init(document.getElementById('main'));
                    myChart.clear();
                    var names = [];
                    var mydata = [];
            $.ajax({
                        method: 'get',
                        url: '/show',
                        dataType: 'json',
                        success: function (datas) {
                            for (var i=0;i<datas.length;i++){
                                names.push(datas[i].name);
                                mydata[i] = {value: datas[i].value, name: datas[i].name};
                            }
                            // 指定图表的配置项和数据
                            var option = {
                                title: {
                                    text: '客户所在城市统计',
                                    left: 'center'
                                },
                                tooltip: {
                                    trigger: 'item',
                                    formatter: '{a} 
{b} : {c} ({d}%)
' }, legend: { orient: 'vertical', left: 'left', data: names }, series: [ { name: '所在城市', type: 'pie', radius: '55%', center: ['50%', '60%'], data: mydata, emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option,true); } }); script>

1.3 关键代码
mydata[i] = {value: datas[i].value, name: datas[i].name};
描述:创建一个数组mydata[],用for循环把后台传来的List整个放进去(注意格式为“{value:xxx, name:xxx}”),在option里的series中通过“data: mydata”传入即可。

var names = [];
success: function (datas) {
    for (var i=0;i<datas.length;i++){
    names.push(datas[i].name);
    ...
    }
}

1.4 注意事项
ajax里的url: 'xxx’要与controller中的@RequestMapping(“xxx”)一致,
eg:上述代码均为/show
须区分ajax所在页面名与url名,eg: 上述代码中的“showCity”与“show”
前端通过ajax的“success: function (xxx)”接收后台传来的数据
1.5 效果展示

2 条形图

2.1 后端-Controller层

 /**
     * 按客户所在城市统计————条形图
     * @param model
     * @return
     */
    @RequestMapping("/showCityBar")
    public String showCityBar(Model model) {
        List echartsList = clientService.getCity();
        String xcors = "";
        String ycors = "";
        int size = echartsList.size();
        for(int i = 0; i < size-1; i++) {
            xcors += echartsList.get(i).getName() + ",";
            ycors += echartsList.get(i).getValue() + ",";
        }
        xcors += echartsList.get(size-1).getName();
        ycors += echartsList.get(size-1).getValue();
        System.out.println(xcors);
        System.out.println(ycors);
        model.addAttribute("xcors", xcors);
        model.addAttribute("ycors", ycors);
        return "showCityBar";
    }

描述:定义一个String型数据,各个值以逗号分隔,X轴、Y轴分别定义。然后通过model.addAttribute(“xcors”, xcors)传给前端。

2.2 前端

showCityBar.html

需要引入

    <div id="main" style="width: 600px;height:400px; margin-left: 20%;">div>
                   <input type="hidden" th:value="${xcors}" id="xcors2"/>
                <input type="hidden" th:value="${ycors}" id="ycors2"/>
        <script type="text/javascript">
                    var xcors2 = document.getElementById("xcors2").value;
                    var ycors2 = document.getElementById("ycors2").value;
                    var xstrs= new Array(); //定义x数组
                    xstrs=xcors2.split(","); //字符分割
                    var ystrs= new Array(); //定义y数组
                    ystrs=ycors2.split(","); //字符分割
                    var myChart = echarts.init(document.getElementById('main'));
                    var option = {
                        title: {
                            text: '客户所在城市统计'
                        },
                        tooltip: {
                            trigger: 'axis'
                        },
                        legend: {
                            data: ['所在城市']
                        },
                        toolbox: {
                            show: true,
                            feature: {
                                dataView: {show: true, readOnly: false},
                                magicType: {show: true, type: ['line', 'bar']},
                                restore: {show: true},
                                saveAsImage: {show: true}
                            }
                        },
                        calculable: true,
                        xAxis: [
                            {
                                type: 'category',
                                data: xstrs
                            }
                        ],
                        yAxis: [
                            {
                                type: 'value'
                            }
                        ],
                        series: [
                            {
                                name: '所在城市',
                                type: 'bar',
                                data: ystrs,
                                markPoint: {
                                    data: [
                                        {type : 'max', name: '最大值'},
                                        {type : 'min', name: '最小值'}
                                    ]
                                },
                                markLine: {
                                    data: [
                                        {type: 'average', name: '平均值'}
                                    ]
                                }
                            }
                        ]
                    };
                     // 使用刚指定的配置项和数据显示图表。
                    myChart.setOption(option);
        script>

2.3 关键代码

var xcors2 = document.getElementById("xcors2").value;
var xstrs= new Array(); //定义x数组
xstrs=xcors2.split(","); //字符分割

描述:创建一个input标签,type设置为hidden,在js中通过document.getElementById().value取值,再定义一个xx数组,通过xx.split(",")进行字符分割。最后在option里的series中通过“data: xstrs”传入即可。

2.4 效果展示

相关