2017-06-30 56 views
0

我已經設置了條形圖。數據默認/當頁面加載我通過PHP獲得。這部分是確定和工作(我已經按照一些例子,這是在網絡上。)Onclick用新數據刷新條形圖javascript(morris chart)

function init_morris_charts() { 

     if(typeof (Morris) === 'undefined'){ return; } 
     console.log('init_morris_charts'); 

     if ($('#graph_bar').length){ 
      morbar = Morris.Bar({ 
       element: 'graph_bar', 
       data: [ 
       <?php echo $tocke; ?> 
       ], 
       xkey: 'date', 
       ykeys: ['marketcap'], 
       labels: ['Market cap value USD'], 
       barRatio: 0.4, 
       barColors: ['#aa8400'], 
       xLabelAngle: 0, 
       hideHover: 'auto', 
       resize: true 
      }); 
     } 
    } 

現在我想建立的是某一條鏈路上每次用戶點擊,新的API調用時功能並用響應數據創建新圖表。基本上圖表需要刷新並顯示新數據。

$('.show_movement_icon').click(function() { 
     valuta_short = $(this).attr('id'); 
     $('#barchart_valuta').text(valuta_short); 

     // example: http://www.coincap.io/history/365day/BTC 
     url = 'http://www.coincap.io/history/365day/'+valuta_short; 
     var novetocke = ""; 
     var novetocke_edit = ""; 

     $.getJSON(url, function(data) { 

      //To get only market cap values. 
      var market_cap = data.market_cap; 

      for(var i=0; i < market_cap.length; i++) 
      { 
       //example: 06-06-2017 07:04:13 
       datum = new Date(market_cap[i][0]).format('d-m-Y h:m:s'); 

       novetocke += "{ date: '" + datum + "', marketcap: " + market_cap[i][1] + " }, "; 
      } 

      novetocke_edit = novetocke.substring(0, novetocke.length-2); 

     }); 
     morbar.setData(novetocke_edit); 
    }); 

當我按下某個鏈接時調用函數。 API si的URL正確放置在一起。我還創建格式字符串,我認爲「數據」,在圖表需要它..

像這樣:

{ date: '12-08-2016 03:08:56', marketcap: 0 }, { date: '13-08-2016 03:08:20', marketcap: 1029733 }, { date: '14-08-2016 05:08:30', marketcap: 1584452 }, { date: '15-08-2016 05:08:30', marketcap: 2460141 }, { date: '16-08-2016 05:08:31', marketcap: 2393176 }, { date: '17-08-2016 05:08:31', marketcap: 2752283 }, { date: '18-08-2016 05:08:31', marketcap: 2676743 }, { date: '19-08-2016 05:08:31', marketcap: 2268252 }, { date: '20-08-2016 05:08:31', marketcap: 2040360 }, { date: '21-08-2016 05:08:30', marketcap: 1999935 }, { date: '22-08-2016 05:08:31', marketcap: 2082395 }, .. etc 

可是,我不工作。在控制檯我看到這一點:

類型錯誤:d未定義 morris.min.js

有人可以告訴我,我的代碼是不正確的。 TNX!

+0

我認爲,我所發送的數據的格式也不行。我也嘗試使用類似JSON.parse的命令將其轉換爲其他格式,但我沒有完成任何操作。 – ghula

回答

0

這是我的版本..

$('.show_movement_icon').click(function() { 
    valuta_short = $(this).attr('id'); 
    $('#barchart_valuta').text(valuta_short); 

    // URL setup 
    url = 'http://www.coincap.io/history/365day/'+valuta_short; 

    var arr = []; 

    $.getJSON(url, function(data) { 
     //To get only market cap values. 
     var market_cap = data.market_cap; 

     for (var i = 0; i < market_cap.length; i++) { 
      datum = new Date(market_cap[i][0]).format('d-m-Y h:m:s'); 

      // Fill array with data 
      arr.push({ 
       date: datum, 
       marketcap: market_cap[i][1] 
      }); 
     } 

     // Send array to chart for data update 
     morbar.setData(arr); 
    }); 

}); 
+0

而你的版本的作品!謝謝您的幫助。 – ghula

0

您需要在getJSON函數內調用setData方法。 你的代碼將被重寫,以便:

$('.show_movement_icon').click(function() { 
    // ... copy lines from your code ... 
    $.getJSON(url, function(data) { 
    //To get only market cap values. 
    var market_cap = data.market_cap; 

    for(var i=0; i < market_cap.length; i++) 
    { 
     //example: 06-06-2017 07:04:13 
     datum = new Date(market_cap[i][0]).format('d-m-Y h:m:s'); 

     novetocke += "{ date: '" + datum + "', marketcap: " + market_cap[i][1] + " }, "; 
    } 

    // I changed the following 3 lines 
    novetocke_edit = novetocke.substring(0, novetocke.length-2); 
    var chartData = JSON.parse(novetocke_edit); 
    morbar.setData(chartData); 
    }); 
}); 

我也被JS數組(JSON.parse(novetocke_edit)),因爲我覺得使用setData不能使用字符串,需要一個對象換成你的字符串變量。

+0

我複製/粘貼代碼,並且點擊圖形不會改變。 SyntaxError:JSON.parse:預期的屬性名稱或'}'在JSON數據的第1行第3列。 – ghula

+0

我嘗試了不同的組合,我也去了並運行novetocke_edit(放在一起的字符串)和驗證失敗的聯機json驗證。基於此,我認爲我需要幫助設置正確的數據形式。 – ghula

+0

@ghula您需要驗證您的novetocke_edit變量是否爲有效的JSON對象。此外,我寧願不使用JSON字符串。你可以使用JS數組:'var items = []; items.push({date:datum.toString(),marketcap:market_cap [i] [1]}); morbar.setData(items);'所以你需要像這樣重寫它,創建'items'數組並使用它來代替你的字符串。 – vorrtex