转发:Ajax动态画EChart图表

本人由于项目需要,在状态变化的时候需要动态绘制对应数据的EChart图表,并且不刷新整个网页。

所以就用Ajax动态画EChart图表,下面是开发过程中遇到的一些坑的总结。

流程:页面首次加载时展示一幅原始的图形,若后台数据更新,则进行一定的业务处理后,前端通过AJAX动态绘制出最新的数据

一、前端JSP代码

    准备一个放图表的容器 

    <div id="AScanChart" style="width:50%; height: 60%;float: left;"></div>

    //初始化echarts实例
    var myAScan = echarts.init(document.getElementById('AScanChart'));
    //使用制定的配置项和数据显示图表

    myAScan.setOption(aScanOption);

    注:这里省略了原始图形aScanOption的代码

    下面是JS代码

    //定时ajax请求判断是否有报警
$(document).ready(function() {
setInterval(showAlert, 10000);//每隔10秒调用一次
});
function showAlert() {
var url = "monitorAction_showAlert.action";
var sendData = {
"tempSensorNum" : "${monitor.sensorNum}"
};
//发送post请求
$.post(url, sendData, function(backData, status) {
//window.alert(backData);
//window.alert(status);


var showAlertJsonString = backData.split("&&");
//window.alert(showAlertJsonString[0]);
//将JSON字符串转出json对象
var showAlertJsonObject = eval("(" + showAlertJsonString[0] + ")");


//window.alert(showAlertJsonObject[0].alertType);
if (showAlertJsonObject[0].alertType == 1) {


$("#blink").html("缺陷报警");
setInterval(changeColor, 250); //设置一个定时器,每200毫秒调用一次变色函数
} else {
$("#blink").html("监测正常");
}
if (showAlertJsonString[1] != ""
&& showAlertJsonObject[0].typeChange == 1) {
var monitorObject = eval("(" + showAlertJsonString[1] + ")");
//window.alert(monitorObject[0].sensorNum);
var xData=eval("(" + monitorObject[0].xDataJson + ")");
var aScanData=eval("(" + monitorObject[0].aScanDataJosn + ")");
var bScanData=eval("(" + monitorObject[0].baseAScanDataJosn + ")");

myAScan.clear();
myAScan.setOption({
title : {
text : 'AScan data'
},
tooltip : {
trigger : 'axis',
axisPointer : {
type : 'cross'
},
},
legend : {
data : [ '用户来源' ]
},
xAxis : {
name : '距离(m)',
data : xData
},
yAxis : {
name : '(%)'
},
toolbox : {
left : 'center',
feature : {
dataZoom : {
yAxisIndex : 'none'
},
dataView : {
readOnly : false
},
restore : {},
}
},
dataZoom : [ {
type : 'inside'
} ],
series : [ {
name : 'signal',
type : 'line',
data : aScanData
}, {
name : 'baseSignal',
type : 'line',
data : bScanData
} ]
},true);
}
});
}


    注:

    var showAlertJsonObject = eval("(" + showAlertJsonString[0] + ")");

    var xData=eval("(" + monitorObject[0].xDataJson + ")");

    var aScanData=eval("(" + monitorObject[0].aScanDataJosn + ")");

    var bScanData=eval("(" + monitorObject[0].baseAScanDataJosn + ")");

    1.这4句代码是关键:由于后端传过来的是JSON字符串,而ECHart的图表需要JSON对象,所有首先将JSON字符串转JSON对象(第一句),这样还没完,现在取出的数据还是字符串,需要将对象.对应的字段,再进行一次JSON转换(这是我项目中的坑)。

    2.由于最开始画了图,所以更新时加上myAScan.clear();。先清空再画

    3.有些情况下若未更新,则设置Option的时候,给第2个参数赋为true即可


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值