ECharts 异步加载数据
ECharts 支持 异步加载数据,适用于从服务器获取动态数据并实时更新图表,例如 Ajax 请求、WebSocket、定时刷新等。
1. 使用 Ajax 请求异步加载
1.1 使用 fetch
加载 JSON 数据
fetch('https://api.example.com/data') // 替换为你的 API 地址
.then(response => response.json())
.then(data => {
var option = {
title: { text: '异步数据加载示例' },
xAxis: { type: 'category', data: data.categories },
yAxis: { type: 'value' },
series: [{ type: 'bar', data: data.values }]
};
chart.setOption(option);
})
.catch(error => console.error('数据加载失败:', error));
📌 说明
fetch(url)
:从 API 获取数据response.json()
:解析 JSON 数据chart.setOption(option)
:更新 ECharts 图表
1.2 使用 XMLHttpRequest
(兼容旧版浏览器)
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.onload = function () {
if (xhr.status === 200) {
var data = JSON.parse(xhr.responseText);
chart.setOption({
xAxis: { data: data.categories },
series: [{ data: data.values }]
});
}
};
xhr.send();
2. 定时刷新数据
2.1 setInterval
定时更新
setInterval(() => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
chart.setOption({
series: [{ data: data.values }]
});
});
}, 5000); // 每 5 秒更新一次
📌 说明
setInterval()
:定时请求数据chart.setOption({ series: [...] })
:动态更新数据
3. WebSocket 实时更新
var socket = new WebSocket('wss://api.example.com/socket');
socket.onmessage = function (event) {
var data = JSON.parse(event.data);
chart.setOption({
series: [{ data: data.values }]
});
};
📌 适用场景
- 实时数据(股票、天气、物联网)
4. 结合 ECharts showLoading()
在数据加载前显示加载动画
chart.showLoading(); // 显示加载动画
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
chart.hideLoading(); // 取消加载动画
chart.setOption({
series: [{ data: data.values }]
});
});
5. 综合示例
var chart = echarts.init(document.getElementById('main'));
chart.showLoading();
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
chart.hideLoading();
chart.setOption({
title: { text: '动态数据示例' },
xAxis: { type: 'category', data: data.categories },
yAxis: { type: 'value' },
series: [{ type: 'line', data: data.values }]
});
// 每 5 秒刷新数据
setInterval(() => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(newData => {
chart.setOption({
series: [{ data: newData.values }]
});
});
}, 5000);
});
6. 总结
方法 | 适用场景 | 实现方式 |
---|---|---|
Ajax (fetch ) | 一次性加载数据 | fetch(url).then() |
定时刷新 (setInterval ) | 定期更新数据 | setInterval(fetch, time) |
WebSocket | 实时更新 | WebSocket.onmessage |
加载动画 | 避免用户等待空白页面 | chart.showLoading() |
🚀 你需要实现哪种数据加载方式?
发表回复