WAMP+百度Echarts實戰
作者:WenWu_Both
出處:http://blog.csdn.net/wenwu_both/article/
版權:本文版權歸作者和CSDN部落格共有
轉載:歡迎轉載,但未經作者同意,必須保留此段宣告;必須在文章中給出原文連結;否則必究法律責任
所謂“WAMP”指的是Windows、Apache、Mysql、PHP,相應的,Linux系統下的這一套就叫“LAMP”,以後看到這倆貨,知道是啥就可以了,本篇主要介紹下在WAMP下,百度Echarts資料的構造方法。
百度Echarts在構造option時,主要用到list和dict兩種資料結構,其典型資料如下:
{
"lengend1 ":["交通小區1","交通小區2","交通小區3","交通小區4","交通小區5"],
"區域出行發生量":[
{"value":45053, "name":"交通小區1"},
{"value":51247, "name":"交通小區2"},
{"value":72968, "name":"交通小區3"},
{"value":25024, "name":"交通小區4"},
{"value":114775, "name":"交通小區5"}
] ,
"lengend2":["交通小區1","交通小區2","交通小區3","交通小區4","交通小區5"],
"xAxis2":["1時", "2時", "3時", "4時", "5時", "6時", "7時", "8時", "9時", "10時", "11時", "12時", "13時", "14時", "15時", "16時", "17時", "18時", "19時", "20時", "21時", "22時", "23時", "24時"],
"交通小區1":[1439, 969, 656, 411, 278, 242 , 319, 778, 1843, 2252, 2828, 2981, 2901, 3222, 3296, 2879, 2842, 2798, 2442, 1922, 2094, 2057, 1968, 1636],
"交通小區2":[1696, 1159, 801, 479, 266, 257, 432, 1013, 1871, 2698, 3337, 3473, 3212, 3376, 3340, 3258, 3147, 3206, 2991, 2241, 2555, 2468, 2136, 1835],
"交通小區3":[3024, 2431, 1660, 1085, 658, 532, 587, 1279, 3078, 3534, 4036, 4220, 4651, 4908, 4539, 3761, 4136, 4167, 3684, 3260, 3769, 3870, 2990, 3109],
"交通小區4":[972, 813, 567, 331, 229, 139, 184, 342, 565, 697, 814, 779, 995, 1315, 1284, 2316, 1736, 1293, 1295, 1207, 1443, 1962, 2538, 1208],
"交通小區5":[3876, 2984, 2211, 1258, 760, 666, 908, 2181, 4722, 5210, 5773, 6887, 7602, 7760, 8647, 7494, 6814, 7216, 6487, 5343, 5350, 5405, 5027, 4194]
}
很明顯,這是一個dict,其中包含了多個list,有的list中又包含了dict。一句話就是,Echarts的資料結構是list與dict相互巢狀一鍋粥(傳遞data的時候,只看最外層就可以)。
(1)list
在js端,list格式的資料可以採取以下方式解析:
var time = [], Area1 = [], Area2 = [], Area3 = [], Area4 = [], Area5 = [], Serdata = []
//呼叫ajax來實現非同步的載入資料
function getdata() {
$.ajax({
type: "post",
async: false,
url: "getdata2.php",
data: {},
dataType: "json",
success: function(result){
if(result){
for(var i = 0 ; i < result.data.length; i++){
time.push(result.data[i].time);
Area1.push(result.data[i].Area1);
Area2.push(result.data[i].Area2);
Area3.push(result.data[i].Area3);
Area4.push(result.data[i].Area4);
Area5.push(result.data[i].Area5);
};
for(var i = 0 ; i < result.data1.length; i++){
Serdata.push({"value":result.data1[i].value, "name":result.data1[i].name});
};
//alert(result.data.length)
}
},
error: function(errmsg) {
alert("Ajax獲取伺服器資料出錯了!"+ errmsg);
}
});
return time, Area1, Area2, Area3, Area4, Area5, Serdata;
}
說白了,就是初始化陣列[],然後通過push的方式進行裝填,單資料直接裝填,如Area1.push(result.data[i].Area1);
,如果是dict,則通過構造進行追加,如Serdata.push({"value":result.data1[i].value, "name":result.data1[i].name});
(2)dict
在js端,dict格式的資料可以採取以下方式解析:
var geodata = new Array()
//呼叫ajax來實現非同步的載入資料
function getdata() {
$.ajax({
type: "post",
async: false,
url: "geodata.php",
data: {},
dataType: "json",
success: function(result){
if(result){
for(var i = 0 ; i < result.length; i++){
geodata[result[i].name] = [result[i].longitude, result[i].latitude] };
//alert(result.data.length)
}
},
error: function(errmsg) {
alert("Ajax獲取伺服器資料出錯了!"+ errmsg);
}
});
return geodata;
}
與list不同的是,其初始化的是物件,而非陣列,var geodata = new Array()
;資料追加模式不是push,而是直接賦值,其構造模式與普通dict沒有任何區別,如:geodata[result[i].name] = [result[i].longitude, result[i].latitude]
(3)php返回多個json
如果js端每需要1個data,後端就構建1個php檔案的話,不光後端會瘋,前端也得增加很多重複的解析json的程式碼,所以要求php能夠一次性返回多個json。
方法很簡單,只需要PHP在最後return資料的時候,將多個json封裝成1個大的json就可以了,然後前端根據各json的name選擇性呼叫就可以了。
如:return "{\"data\":", $data, ",\"data1\":", $data1, "}"
注意:拼裝的json不宜過多,否則會影響前端的重新整理速度。
ps: PHP嚴格要求每行以“;”結尾,需要注意一下;json資料中有中文的話,可能會發生亂碼,需要注意編碼統一;php返回的結果中,中文可能顯示為編碼符號,但打印出來就正常了,所以不必擔心。
拿上文中的樣例資料做了下測試,結果如下: