echarts實現非同步載入數據,點擊更新圖表功能。

項目需求:根據幫農頁面非同步添加數據,實現頁面的圖表數據點擊更新。具體的源碼如下,僅供參考。

未用ajax實例:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>ECharts</title>

<script src="echarts.min.js"></script>

<script type="text/javascript" src="jquery-2.1.1.js"></script>

<style>

.btu{ width:104px; height:198px;}

.btu ul{ margin:0; padding:0;width:104px; height:198px;}

.btu ul li{ list-style:none; width:50px; height:20px; background-color:#999;

color:#fff; float:left; margin-left:2px; margin-top:2px;cursor:pointer;}

.btu ul .yanse{ background-color:#F00;}

</style>

</head>

<body>

<div class="btu">

<ul>

<li class="yanse">仔豬</li>

<li>活豬</li>

<li>豬肉</li>

<li>羊肉</li>

<li>牛肉</li>

<li>生鮮乳</li>

<li>活雞</li>

<li>白條雞</li>

<li>雞蛋</li>

<li>代蛋雛雞</li>

<li>代肉雛雞</li>

<li>主產省雞蛋</li>

<li>玉米</li>

<li>豆粕</li>

<li>進口魚粉</li>

<li>豬飼料</li>

<li>肉雞飼料</li>

<li>蛋雞飼料</li>

</ul>

</div>

<div id="main" stylex="width: 600px;height:400px;"></div>

<script type="text/javascript">

// 基於準備好的dom,初始化echarts實例

var myChart = echarts.init(document.getElementById(main));

// 指定圖表的配置項和數據

myChart.setOption({

title: {

text:

},

tooltip : {

trigger: axis

},

legend: {

data:[]

},

toolbox: {

feature: {

saveAsImage: {}

}

},

grid: {

left: 3%,

right: 4%,

bottom: 5%,

containLabel: true

},

xAxis : [

{

type : category,

boundaryGap : false,

data : [,第一周,第一周,第一周,第一周,第一周,第一周,第一周,第一周,第一周,第一周],

axisLabel:{

interval: 0 ,

rotate:40

}

}

],

yAxis : [

{

type : value

}

],

series : [

{

name:蘋果,

type:line,

stack: 銷量,

//areaStyle: {normal: {}},

data:[]

}

]

});

myChart.showLoading();

// 使用剛指定的配置項和數據顯示圖表。

// myChart.setOption(option);

myChart.setOption({ //載入數據圖表

series: [{

data:[,0, 20, 30, 80,10, 20, 30, 0,10, 20]

}]

});

myChart.hideLoading();

$(.btu ul li).click(function(){

$(.btu ul li).removeClass(yanse);

$(this).addClass(yanse);

var index = $(this).index();

if(index==1){

console.log(nihao)

myChart.setOption({ //載入數據圖表

series: [{

data:[,0, 50, 30, 80,10, 20, 30, 20,10, 20]

}]

});

}

if(index==2){

console.log(nihao1)

myChart.setOption({ //載入數據圖表

series: [{

data:[,40, 50, 30, 80,10, 20, 30, 20,10, 20]

}]

});

myChart.hideLoading();

}

if(index==3){

console.log(nihao2)

myChart.setOption({ //載入數據圖表

series: [{

data:[,60, 50, 30, 80,10, 30, 30, 20,10, 20]

}]

});

myChart.hideLoading();

}

})

</script>

</body>

</html>

ajax請求實例:

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>ECharts</title>

<script type="text/javascript" src="echarts.min.js"></script>

<script type="text/javascript" src="jquery-2.1.1.js"></script>

</head>

<body>

<div id="main" stylex="width: 600px;height:400px;"></div>

<script type="text/javascript">

var myChart = echarts.init(document.getElementById(main));

// 顯示標題,圖例和空的坐標軸

myChart.setOption({

title: {

text: 非同步數據載入示例

},

tooltip: {},

legend: {

data:[銷量]

},

xAxis: {

data: []

},

yAxis: {},

series: [{

name: 銷量,

type: bar,

data: []

}]

});

myChart.showLoading(); //數據載入完之前先顯示一段簡單的loading動畫

var names=[]; //類別數組(實際用來盛放X軸坐標值)

var nums=[]; //銷量數組(實際用來盛放Y坐標值)

$.ajax({

type : "post",

async : true, //非同步請求(同步請求將會鎖住瀏覽器,用戶其他操作必須等待請求完成

才可以執行)

url : "TestServlet", //請求發送到TestServlet處

data : {},

dataType : "json", //返回數據形式為json

success : function(result) {

//請求成功時執行該函數內容,result即為伺服器返回的json對象

if (result) {

for(var i=0;i<result.length;i++){

names.push(result[i].name); //挨個取出類別並填入類別數組

}

for(var i=0;i<result.length;i++){

nums.push(result[i].num); //挨個取出銷量並填入銷量數組

}

myChart.hideLoading(); //隱藏載入動畫

myChart.setOption({ //載入數據圖表

xAxis: {

data: names

},

series: [{

// 根據名字對應到相應的系列

name: 銷量,

data: nums

}]

});

}

},

error : function(errorMsg) {

//請求失敗時執行該函數

alert("圖表請求數據失敗!");

myChart.hideLoading();

}

})

</script>

</body>

</html>


推薦閱讀:

Angular 應用瘦身記——比 jQuery 更小的 TodoMVC
簡單粗暴的移動端適配方案 - REM
實戰 | 用原生js寫一個&quot;多動症&quot;的簡歷
聊聊代碼的拆分和一些前端架構思想
閱讀vue.js源碼可以從哪幾方面入手?

TAG:前端開發 | 前端框架 | 前端開發框架和庫 |