ajax异步加载获取数据与Echarts渲染图表的两种解决方案

简介: ajax异步加载获取数据与Echarts渲染图表的两种解决方案

ajax获取API接口数据,然后在Echarts中进行数据传递渲染,是最常见的方式,也是实现客户端轮询图表刷新的必用方式。在开发过程中,不同的需求对ajax的使用也有不同的方式。

引入外部JS包

    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <!--Echarts核心库-->
    <script type="text/javascript" charset="utf-8" src="js/echarts.min.js"></script>


HTML代码

<div class="container">
    <div class="weather-side">
        <div class="weather-gradient" id="main"></div>
    </div>
</div>


正常Echarts图表

    var myChart = echarts.init(document.getElementById("main"));
    var option = {
        xAxis: {
            type: 'category',
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        yAxis: {
            type: 'value',
        },
        series: [{
            data: [120, 200, 150, 80, 70, 110, 130],
            type: 'bar',
            backgroundStyle: {
                color: 'rgba(220, 220, 220, 0.8)'
            }
        }]
    };
    myChart.setOption(option);
    window.addEventListener("resize", function () {
        myChart.resize();
    });


通过ajax获取数据实现图表的渲染

数据文件data.json

{
  "err": "0",
  "res": "OK",
  "data": [
    {
      "name": "Mon",
      "data": "120"
    },
    {
      "name": "Tue",
      "data": "200"
    },
    {
      "name": "Wed",
      "data": "150"
    },
    {
      "name": "Thu",
      "data": "80"
    },
    {
      "name": "Fri",
      "data": "80"
    },
    {
      "name": "Sat",
      "data": "110"
    },
    {
      "name": "Sun",
      "data": "130"
    }
  ]
}


1.封装函数,ajax内部调用;

应用场景

  1. 适合相同图表的不同场合或多次调用,封装成公共函数,减少代码冗余;
  2. 传递参数,按照不同的使用需求设置多个。比如:必须的data和X轴名称外,可以设置容器的id、柱图的颜色等等;


实践代码

    //获取JSON数据;
    $.getJSON("data/data.json", function (res) {
        var dataList = [], dataName = [];
        for (var i = 0; i < res.data.length; i++) {
            dataName.push(res.data[i].name);
            dataList.push({value: res.data[i].data}
            );
        }
        //console.log(dataName);
        //渲染图表;
        getLine(dataName, dataList)
    })
    function getLine(dataName, dataList) {
        var myChart = echarts.init(document.getElementById("main"));
        var option = {
            xAxis: {
                type: 'category',
                data: dataName
            },
            yAxis: {
                type: 'value',
            },
            series: [{
                data: dataList,
                type: 'bar',
                backgroundStyle: {
                    color: 'rgba(220, 220, 220, 0.8)'
                }
            }]
        };
        myChart.setOption(option);
        window.addEventListener("resize", function () {
            myChart.resize();
        });
    }

2.Echarts内部调用ajax;

实践代码

 var myChart = echarts.init(document.getElementById("main"));
    var option = {
        xAxis: {
            type: 'category',
            data: []
        },
        yAxis: {
            type: 'value',
        },
        series: [{
            data: [],
            type: 'bar',
            backgroundStyle: {
                color: 'rgba(220, 220, 220, 0.8)'
            }
        }]
    };
    myChart.setOption(option);
    //获取JSON数据;
    $.getJSON("data/data.json", function (res) {
        var dataList = [], dataName = [];
        for (var i = 0; i < res.data.length; i++) {
            dataName.push(res.data[i].name);
            dataList.push({value: res.data[i].data}
            );
        }
        //传递数据;
        myChart.setOption({
            xAxis: {
                data: dataName
            },
            series: [{
                data: dataList
            }]
        });
    })
    window.addEventListener("resize", function () {
        myChart.resize();
    });


其他说明

ajax异步加载返回值作用域的问题

    //获取JSON数据;
    var dataList = [], dataName = [];
    $.getJSON("data/data.json", function (res) {
        for (var i = 0; i < res.data.length; i++) {
            dataName.push(res.data[i].name);
            dataList.push({value: res.data[i].data}
            );
        }
        console.log(dataName);//正常显示;
    })
    console.log(dataName);//显示为空,不能将ajax的数值传递至作用域外。


不推荐的同步加载方式

《ajax获取success返回值的解决方案》,https://blog.csdn.net/weixin_41290949/article/details/104281027

Done!

相关文章
|
1月前
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
55 1
|
30天前
|
JavaScript
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
219 0
|
2月前
|
Web App开发 数据可视化 前端开发
Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】
本文介绍了ECharts的基本使用和语法格式,包括如何引入ECharts、创建容器、初始化echarts实例对象、配置option参数和一些基础图表的绘制方法。文章还提供了简单图表绘制和使用图例添加的示例代码,以及对ECharts特性和优势的概述。
Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】
|
3月前
|
小程序 JavaScript
微信小程序使用echarts图表(ec-canvas)
这篇文章介绍了在微信小程序中使用`ec-canvas`集成echarts图表的方法,包括解决加载时报错的问题、配置图表组件、以及在小程序页面中引入和使用这些图表组件的步骤。
469 1
微信小程序使用echarts图表(ec-canvas)
|
1月前
|
Web App开发 前端开发 JavaScript
Python编程—Ajax数据爬取(一)
Python编程—Ajax数据爬取(一)
|
1月前
|
前端开发 NoSQL MongoDB
Python编程—Ajax数据爬取(二)
Python编程—Ajax数据爬取(二)
|
3月前
|
前端开发 数据可视化 JavaScript
Echarts如何实现多图表缩放和自适应?附源码
Echarts如何实现多图表缩放和自适应?附源码
Echarts如何实现多图表缩放和自适应?附源码
|
2月前
|
JSON 前端开发 数据格式
layui 穿梭框transfer组件 数据data用ajax来获取
layui 穿梭框transfer组件 数据data用ajax来获取
179 2
|
3月前
|
XML SQL JavaScript
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
|
3月前
Echarts——如何默认选中图表并显示tooltip
Echarts——如何默认选中图表并显示tooltip
60 1