2012-08-15 72 views
0

如何從setinterval中定義的函數內訪問系列數據。當我嘗試訪問任何值,甚至數組長度時,它說未定義。如何訪問setinterval函數內的javascript數組值

events: { 
       load: function() { 

        // set up the updating of the chart each second 
        var series0 = this.series[0]; 
        var series1 = this.series[1]; 
        var series2 = this.series[2]; 
        var series3 = this.series[3]; 
        setInterval(function() { 
         var y = $.ajax({url: "/index.php/control/fetch/<?php echo $uid; ?>",async: false}).responseText; 
          y = y.split(" "); 
         var x = parseInt(y[0]); 
         //alert("x = " + series0[0]); 
         //alert("len is " + parseInt(series0.length)); 
         series0.addPoint([x, parseFloat(y[1])], true, true); 
         series1.addPoint([x, parseFloat(y[2])], true, true); 
         series2.addPoint([x, parseFloat(y[3])], true, true); 
         series3.addPoint([x, parseFloat(y[4])], true, true); 

        }, 5000); 
       } 
      } 

感謝

+0

你能發表更多的代碼嗎?你的代碼看起來很好,也許問題是最初的賦值,即'var series0 = this.series [0]'。 – 2012-08-15 13:37:05

+0

繼承人完整的代碼http://pastebin.com/4dEZR7YL – ethangk 2012-08-15 13:40:12

+0

@ethangk - 而不是編輯你的問題的答案,只需添加一個答案。回答你自己的問題是完全可以接受的。 – 2013-10-15 14:17:38

回答

1

你需要做出的setInterval回調函數外的參考。類似這樣的:

load : function() { 
... 
var _self = this; 
setInterval(function() { 
    console.log(_self.series); 
}, 5000); 
} 
+0

太棒了,它允許我訪問該系列,但當我嘗試執行警報(self.series [0] .length)時,它仍然會引起爭論,聲稱它是未定義的。我試圖做的是訪問任何系列的最後x值。 – ethangk 2012-08-15 13:49:06

+0

另外,爲什麼在回調函數之外引用它會使其工作? – ethangk 2012-08-15 13:56:38

+0

我已經看到了你的代碼,實際上不可能知道你可以從哪個對象訪問系列而不用猜測。您需要查看文檔。或者做console.log(圖表);用手在物體內某處搜索系列屬性。 – xCander 2012-08-15 13:56:44