如何访问setinterval函数内的javascript数组值

问题描述:

如何从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

你需要做出的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