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内部调用;
应用场景
- 适合相同图表的不同场合或多次调用,封装成公共函数,减少代码冗余;
- 传递参数,按照不同的使用需求设置多个。比如:必须的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!
















