ECharts+Ajax動態(tài)加載數(shù)據(jù)實例(.NET)

什么是ECharts

ECharts 是一個數(shù)據(jù)可視化工具蟆肆,提供了系列常用圖表,底層基于ZRender(一個全新的輕量級canvas類庫)悟衩,創(chuàng)建了坐標系,圖例栓拜,提示座泳,工具箱等基礎組件,并在此上構建出折線圖幕与、柱狀圖挑势、散點圖、K線圖啦鸣、餅圖潮饱、雷達圖、地圖诫给、和弦圖香拉、力導向布局圖、儀表盤以及漏斗圖中狂,同時支持任意維度的堆積和多圖表混合展現(xiàn)缕溉。用ECharts展示數(shù)據(jù)很美觀,而且官方文檔非常詳細吃型,入手很快证鸥。
那么如何在ECharts中靈活使用Ajax獲取數(shù)據(jù)呢。仔細看一下官方文檔可以發(fā)現(xiàn)對象option的數(shù)據(jù)格式和JSON相似度很高勤晚。所以可以很方便的使用JSON格式數(shù)據(jù)枉层。

什么是JSON

JSON是一種與開發(fā)語言無關的輕量級的數(shù)據(jù)格式,全稱是JavaScript Object Notation赐写。

  • 標準格式:key:value 鍵值對
  • 數(shù)據(jù)結構:對象和數(shù)組
  • Object(對象):使用花括號包含的鍵值對結構鸟蜡,key必須是string類型,value為任何基本類型或數(shù)據(jù)結構挺邀。
  • Array(數(shù)組):使用中括號揉忘,并用逗號分隔元素。

簡單JSON數(shù)據(jù)示例:

{
    "key":"value",
    "name":"王小二", //字符串
    "age":20, //數(shù)字
    "has_girlfriend":false,      //boolean 
    "major":["理發(fā)","挖掘機"], //數(shù)組
    "簽名":NULL //null
}
{
    "學生甲":{     
            "高數(shù)":100     //對象
            "算法":100
},
    "學生乙":{
            "高數(shù)":90
            "算法":90
    }
}

柱狀圖實例

Step1:首先學習柱狀圖的使用端铛,模仿ECharts官方文檔中的柱狀圖的例子寫一個.html頁面泣矛,此時數(shù)據(jù)是直接寫在前端頁面中,成功之后繼續(xù)下一步禾蚕,改寫為使用JSON格式數(shù)據(jù)您朽。
Step2:我們需要通過Ajax動態(tài)獲取后臺的數(shù)據(jù),拋棄前端寫死的數(shù)據(jù)(拿Series屬性中的數(shù)據(jù)舉例)换淆,通過Ajax接口獲取后臺提供的數(shù)據(jù)哗总。使用的服務器端技術為.NET.在.NET中新建一個普通的histogram.ashx頁面几颜,首先需要定義一個series類,設置series序列的基本屬性name讯屈、type蛋哭、data,data為數(shù)組因此定義為List<>List數(shù)據(jù)類型根據(jù)需要可以定義為double涮母,string具壮。

/// <summary>
///定義一個Series類,設置其每一組的一些基本屬性
/// </summary>
/// 
class Series
{
    public string name
    {
        get;
        set;
    }
    public string type
    {
        get;
        set;
     }
    public List<double> data
    {
        get;
        set;
     }
}

Step3:定義一個函數(shù)ShowChart()哈蝇,實例化一個Series類棺妓,并將其轉(zhuǎn)化為JSON格式數(shù)據(jù),需要添加引用Newtonsoft.Json.dll炮赦。

private void ShowChart()
{
    /*Series序列數(shù)據(jù)*/
    List<Series> seriesList = new List<Series>();
    Series series1 = new Series();
    series1.name = "蒸發(fā)量";
    series1.type = "bar";
    series1.data = new List<double>() { 22, 55, 63,44,15,45,60,10,50 };
    Series series2 = new Series();
    series2.name = "降雨量";
    series2.type = "line";
    series2.data = new List<double>() { 10, 50, 24, 53, 40, 30, 10, 52, 22 };
    Series series3 = new Series();
    series3.name = "溫度";
    series3.type = "line";
    series3.data = new List<double>() { 5, 6, 4, 2, 8, 10, 0, 21, 20, 15, 12 };
    Series series4 = new Series();
    series4.name = "Temperature";
    series4.type = "bar";
    series4.data = new List<double>() { 8, 6, 8, 1, 2, 8, 3, 12, 5, 8, 15 };
    seriesList.Add(series1);
    seriesList.Add(series2);
    seriesList.Add(series3);
    seriesList.Add(series4);
    var newObj = new
    {
        //返回給前端頁面的數(shù)據(jù)
        series = seriesList,
        xAxis = xData
    };
    string strJson = ToJson(newObj);
    WriteJson(strJson);
}
public static string ToJson(object obj)
{
    return NewtosoftJson(obj);
}
public static string NewtosoftJson(object obj)
{
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj,Newtonsoft.Json.Formatting.None);
}
public static void WriteJson(string str)
{
    HttpContext.Current.Response.Write(str);
    HttpContext.Current.Response.End();
}
public bool IsReusable {
    get {
    return false;
    }
}

Step4:前端使用Ajax獲取數(shù)據(jù)怜跑。在<script></script>標簽中添加

$.ajax({
        type: 'post', //發(fā)送請求類型為POST
        url: 'histogram.ashx?action=ShowChart', //請求頁面的URL,此頁面即為上面所述提供JSON數(shù)據(jù)的頁面吠勘,傳遞參數(shù)ShowChart性芬,后臺解析并調(diào)用相應的函數(shù)
        data: {},
        dataType: 'json', //請求數(shù)據(jù)類型為JSON
        async: true, //是否為異步加載,true為異步剧防,false為同步
        success: function (result) { //請求成功:result為后臺返回數(shù)據(jù)
            if (result) {
                option.series = result.series;//將得到的數(shù)據(jù)賦值給option的Series屬性
                myChart.setOption(option);
            }
        },
        error: function () { //請求失敗
            alert("Error");
        }
    });

Step5:服務器端接收Http請求并響應,.NET中提供了IHttpHandler接口植锉,允許對Http請求行編程,重寫ProcessRequest方法峭拘,HttpContext是一個重要的上下文對象俊庇,這里為請求中傳遞的參數(shù)ShowChart,在此方法中進行解析鸡挠,并調(diào)用相應的函數(shù)進行處理辉饱,并將返回數(shù)據(jù)。

public class histogram : IHttpHandler {
    public void ProcessRequest (HttpContext context) {
        string action = context.Request.QueryString["action"];
        switch (action)
        {
            case "ShowChart":
            ShowChart();break;
        }
    }
         //此處應為上述中ShowChart()函數(shù)代碼以及類的定義
}

然后就大功告成了拣展,屬性xAxis彭沼、yAxis等中的數(shù)據(jù)也可以以同樣的方式進行獲取。在本例中數(shù)據(jù)從前臺轉(zhuǎn)移到了后臺代碼中备埃,如果需要存儲數(shù)據(jù)的數(shù)據(jù)庫中有選擇性的獲取姓惑,.NET連接數(shù)據(jù)庫,讀取數(shù)據(jù)返回即可按脚。
最后上圖

Echarts柱狀圖.PNG

echarts1.gif
echarts2.gif

很重要的備注:
參考博客:萬水千山走遍
網(wǎng)址:ECharts官網(wǎng)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末于毙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子乘寒,更是在濱河造成了極大的恐慌望众,老刑警劉巖匪补,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伞辛,死亡現(xiàn)場離奇詭異烂翰,居然都是意外死亡,警方通過查閱死者的電腦和手機蚤氏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門甘耿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竿滨,你說我怎么就攤上這事佳恬。” “怎么了于游?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵毁葱,是天一觀的道長。 經(jīng)常有香客問我贰剥,道長倾剿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任蚌成,我火速辦了婚禮前痘,結果婚禮上,老公的妹妹穿的比我還像新娘担忧。我一直安慰自己芹缔,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布瓶盛。 她就那樣靜靜地躺著最欠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惩猫。 梳的紋絲不亂的頭發(fā)上窒所,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音帆锋,去河邊找鬼吵取。 笑死,一個胖子當著我的面吹牛锯厢,可吹牛的內(nèi)容都是我干的皮官。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼实辑,長吁一口氣:“原來是場噩夢啊……” “哼捺氢!你這毒婦竟也來了?” 一聲冷哼從身側響起剪撬,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤摄乒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馍佑,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡斋否,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拭荤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茵臭。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舅世,靈堂內(nèi)的尸體忽然破棺而出旦委,到底是詐尸還是另有隱情,我是刑警寧澤雏亚,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布缨硝,位于F島的核電站,受9級特大地震影響罢低,放射性物質(zhì)發(fā)生泄漏追葡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一奕短、第九天 我趴在偏房一處隱蔽的房頂上張望宜肉。 院中可真熱鬧,春花似錦翎碑、人聲如沸谬返。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遣铝。三九已至,卻和暖如春莉擒,著一層夾襖步出監(jiān)牢的瞬間酿炸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工涨冀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留填硕,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓鹿鳖,卻偏偏與公主長得像扁眯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翅帜,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容