Echarts通過Ajax動態獲取后端數據(條形圖、餅圖)


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

1 餅圖

1.1 后端-Controller層

傳的是List型數據

     /**
     * 按客戶所在城市統計————餅圖
     * @param model
     * @return
     */
    @RequestMapping("/show")
    @ResponseBody
    public List<Echarts> show(Model model) {
        List<Echarts> 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 src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
        <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} <br/>{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<Echarts> 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

需要引入

<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
    <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 關鍵代碼
<input type="hidden" th:value="${xcors}" id="xcors2"/>
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 效果展示

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM