1. 程式人生 > >echarts非同步資料載入(在下拉框選擇事件中非同步更新資料)

echarts非同步資料載入(在下拉框選擇事件中非同步更新資料)

接觸echarts 大半年了,從不會到熟練也做過不少的圖表,隔了一段時間沒使用這玩意,好多東西真心容易忘了。在接觸echarts這期間也沒有總結什麼東西,今天我就來總結一下如何在echart中非同步載入資料,在實際的工作的中對資料的刷選非常常見,比如在下拉框中選擇,時間選擇等的一些事件中非同步載入資料。一個很常見的篩選如圖:

下面我就直接用程式碼來實現怎樣在事件刷選中非同步重新整理資料

 //路徑配置
    require.config({
        paths: {
            echarts: "/Scripts/echarts-2.2.7/build/dist"
        }
    });
    var MYCHART;  //宣告一個大寫的全域性變數,能不用全域性的儘量就不要用全域性變數
    //使用
    require(['echarts',      
        'echarts/chart/bar'],  //按需載入
        function (ec)
        {
            //例項dom
             MYCHART = ec.init(document.getElementById("main"));
            var option = {
                tooltip: {
                    show: true
                },
                legend: {
                    data: ['得分']
                },
                xAxis: [
                    {
                        type: "category",
                        data:['']
                      //  data:["科比", "歐文", "詹姆斯", "庫裡", '杜蘭特', '威少', '韋德']
                    }
                ],
                yAxis: [
                    {
                        type: "value"
                    }
                ],
                series: [
                    {
                        "name": "得分",
                        "type": "bar",
                         data:['']
                         //data:[20102, 2000, 1200, 1002, 1204, 4545, 7878]
                    }
                ]
            }
            console.info(MYCHART);
            //位echart物件載入資料
            MYCHART.setOption(option,true);
            loadOption(2011);//使用ajax同步載入資料
        }
    )


其實我也很納悶了,這個xAxis中data屬性是一個數組,series中data也是一個數組,如果直接不寫任何資料,在loadOption方法中,再獲取MACHAT.option中會找不到series,xAxis ,option倒是能獲取到,但是這個物件是空的。這讓我很奇怪,所以只能先寫一個空字串了。

    //ajax 非同步載入配置資料項
    function loadOption(year)
    {
        $.ajax({
            url: '/Home/GetJson?year='+year,
            type: 'get',
            dataType: 'json',
            async: false,
            success: function (result) {
                if (result)
                {
                    var option = MYCHART._option;  //e2中感覺這個命名十分奇怪,居然要這樣獲取,必須先設定才有這個屬性
                    debugger
                    if (result.seriesData == null) {
                        option.series[0].data = [''];
                        option.xAxis[0].data = ['']
                    }
                    else {
                        option.series[0].data = result.seriesData;
                        option.xAxis[0].data = result.xAxisData;
                    }
                    MYCHART.setOption(option,true);
                }
            },
            error: function ()
            {
                alert("不好意思請求失敗了");
            }
        })
    }

要注意這兩點

1.剛開始的時候我也很奇怪,獲取option 屬性居然有這樣獲取MYCHART._option 。在e3直接MYCHART.getOption()就可以獲取到。

2.echarts圖表動態重新整理資料不能清空資料,這是因為多次呼叫option預設是合併的Merge ,文件裡說設定第二個引數為true就ok ,如上MYCHART.setOption(option,true)

下拉框選擇年份事件:

    function yearChange(selectObj)
    {
        var year = $(selectObj).val();
        loadOption(year);
    }


實際執行的效果圖如下:


echarts圖表中值得注意兩點上面已經說了,一個數據動態載入資料沒有清除資料,一個獲取option必須先setOption才能獲取到。但是我鬱悶的是如果不給series 中data屬性設值,xAxis中data屬性設值獲取到的option是一個空的object。雖然實現整個下拉選擇事件動態載入資料的功能,但是程式碼還是得優化一下。

整個思路就是同步執行ajax載入資料,設定option中的屬性。還是要注意方法呼叫的循序。經常會underfined地報錯,debugger的時候看的很清楚。

作者:張林

轉載隨意註明出處

有興趣的可以關注一下我的公眾號,每天分享一篇it技術、面試技巧、技術感想的文章

相關推薦

echarts非同步資料載入(在下選擇事件中非同步更新資料)

接觸echarts 大半年了,從不會到熟練也做過不少的圖表,隔了一段時間沒使用這玩意,好多東西真心容易忘了。在接觸echarts這期間也沒有總結什麼東西,今天我就來總結一下如何在echart中非同步載入資料,在實際的工作的中對資料的刷選非常常見,比如在下拉框中選擇,時間選擇等

easyui中一個頁面多個combobox載入同一json資料無法選中問題

版本問題,可以通過升級easyui為最新版本解決,也可以通過以下程式碼處理/** * 初始化下拉框 * @param unitid dom元素id * @param value 初始化選中值 * @param data json資料集合 */ function in

使用ajax從資料庫動態載入(select)資料,可編輯

<div style="position:relative;"> <span style="margin-left:100px;width:18px;overflow:hidden;"> <select id="ch

ajax 載入資料

html:             <select class="form-control" id="cRoleName" name="cRoleName">             </select> js: $.ajax({          

ajax動態載入資料

下拉框—–ajax動態載入資料 嗨!這是我發表的第一篇部落格,希望對大家有所幫助,有什麼不對的地方還望校正! jsp頁面(型別一) <select class="form-control" name="orgName" id="select_

easyui 綁定下選擇改變事件的觸發方法

height mbo options ble data 方法 cte com ear //①定義下拉框 //離線公司【個人或公司】 下拉框 var tmpComOrPer = { type: ‘combobox‘, options

layui 根據選擇 顯示圖片

圖示: <div class="layui-col-md6"> <label class="layui-form-label">圖示</label> <div class="layui-input-block"> &l

selenium+ java —— 選擇

public class select { public static void main(String[] args) throws InterruptedException { //驅動配置資訊 System.setProperty ( "webdr

ComboGrid(資料表格)[分頁+搜尋+多選]

注意:後臺控制層接收該控制元件的引數名必須是  //likeName:根據需求可有可無需要模糊條件查詢時新增 (String likeName,Integer page, Integer rows

【EasyUI篇】ComboGrid資料表格元件

微信公眾號: 關注可獲得更多幹貨哦!問題或建議,請公眾號留言; ------------------------------------------------ 關注小編微信公眾號獲取更多資源 ----------------------------------

jquery autocomplete 自動填充的使用之自定義資料顯示

官方的介紹地址為 http://jqueryui.com/autocomplete/ 本文對於簡單的使用不做介紹,僅僅介紹自定義資料結構如何進行顯示,在官方的demo中也有(http://www.jqueryui.org.cn/demo/5663.html),程式碼如下: <

選擇聯動,selectpicker重置清空

下拉框選擇聯動 效果如下所示: 左側選擇一個選項時,右側下拉框只出現相應可選擇項 程式碼如下: <select class="form-control" id="acceptdepart" name="acceptdepart"></sel

備忘錄----------選擇觸發事件

<select onchange="func()> <option value="0" >選項一</option> <option value="1" >選項二</option>

easyUI中年份,月份選擇選擇

           form表單內程式碼            <input type="text" class="jeasy-combobox" name="year" id="yearChoose">             js程式碼         

selenium-Python之定位選擇

from selenium.webdriver.support.ui import Select # 通過index進行選擇 Select(driver.find_element_by_id("

selenium + Python 選擇

html: <td width="70%" colspan="2" align="left" valign="middle"> <select name="wb" id="wb" onchange="vc.setParam(this)"> &

ASP.NET MVC搭建專案後臺UI框架—11、自動載入查詢

需求:在查詢記錄的時候,輸入第一個字,就自動把以這個字開頭的相關記錄查找出來,輸入2個字就過濾以這兩個子開頭的記錄,依次類推。 突然要用到這個功能了,印象中曾經寫過這個功能的文章,一下子找不到了,只好重新貼出來備忘。最近部落格快2個月沒更新了,因為這兩個月一直在閉門寫書。   <link

jquery+html實現查詢資料

1 $(document).ready(function () { 2 $.ajax({ 3 timeout: 3000, 4 async: false, 5 type: "POST", 6 u

【axure教程】選擇動態顯示結果

說實話,這個案例我是在UCD大社群看到的,不過都是英文,愣是硬著頭皮學習的,幸好英文底子+google。 1、案例效果圖 這個例子的效果是,使用者切換左邊的下拉框選項,右邊的提示文字會隨之變化。當選中的是圖書時,文字框中的文字是“請輸入圖書名稱或作者”;當選中音樂時

利用ztree封裝多級選擇

1、定義文字<!--編輯時,value傳入id即可--><input type="text" class="form-control" id="makrid" value="" />2、呼叫$(function(){   $("#makrid").dr