2012-08-08 54 views
0

我有下面的函數,它讀取JSON數據並將其放在圖表上。我想每10秒鐘自動更新一次圖表數據。更新Dojo中的圖表數據

我曾看過dojo/timing和chart.updateSeries,我相信兩者的結合可以做到這一點,但我不確定我如何實現這一點。任何幫助將不勝感激。

function(xhr, json, arrayUtil, number, Chart, theme) { 

      var def = xhr.get({ 
       url: "cpuusage.json", 
       handleAs: "json" 
      }); 

      def.then(function(res){ 
       var chartData = [];     
       arrayUtil.forEach(res.chart, function(chart){ 
        chartData[chart.x] = number.parse(chart.y); 
       }); 

       //Draw chart 
       var chart = new Chart("chartNode2"); 
       chart.setTheme(theme); 
       chart.addPlot("default", { 
        type: "Columns", 
        markers: true, 
        gap: 5 
       }); 
       chart.addAxis("x"); 
       chart.addAxis("y", { vertical: true, fixLower: "major", fixUpper: "major" }); 
       chart.addSeries("Monthly Sales",chartData); 
       chart.render(); 

      }, function(err){ 
       console.error("Failed to load JSON data"); 
      }); 
     } 

回答

2

嘗試類似的東西:

var interval = setInterval(function(){ 
    // let's get new data 
    xhr.get({ 
     url: "cpuusage.json", 
     handleAs: "json" 
    }).then(function(res){ 
     // data prep step - just like before 
     var chartData = []; 
     arrayUtil.forEach(res.chart, function(chart){ 
      chartData[chart.x] = number.parse(chart.y); 
     }); 
     // update chart (it was created before) 
     chart.updateSeries("Monthly Sales", chartData); 
     chart.render(); 
    }, function(err){ 
     console.error("Failed to load updated JSON data"); 
    }); 
}, 10000); // 10s 
... 
// when we want to cancel updates 
clearInterval(interval); 

對不起,我沒有使用dojo/timing,我看不出有任何理由在這裏,並且更喜歡簡單的方法做簡單的事情。