无法读取未定义的属性'push'TypeError:无法读取未定义错误的属性'push'

时间:2017-03-21 05:08:51

标签: javascript jquery arrays json

我已经定义了一个JS数组,如下所示:

var forecastJSArray=new Array();

然后我尝试使用push将我的json对象添加到此数组中,如下所示:

$.getJSON("api-detail.json")
  .then(function (forecast){
    $.each(forecast, function() {
      self.forecastJSArray.push({
         rank: this.rank,
         rep: this.rep,
         total: this.total,
      });
    });
  })
;

但是当我运行这段代码时,它会给我一个错误: 无法读取未定义的属性'push'TypeError:无法读取未定义的属性'push'

我的最终数组应如下所示:

[
  {
     "rank" : 1, 
     "rep" : "rep1", 
     "total" : 10,
  }, {
    //...etc
  }
]

如果有人能够让我知道我在哪里出错,真的很感激。非常感谢。

修改 代码包含在oracle-jet视图模型中(使用knockoutjs视图模型),这就是这样的,带有RequireJS块:

define(['ojs/ojcore', 'knockout', 'jquery', 'ojs/ojselectcombobox', 
'ojs/ojtable', 'ojs/ojbutton'], function(oj, ko, $) {

    function DashboardViewModel() {
        var self = this;
        ... earlier code
        ... earlier code
    }
    return new DashboardViewModel();
});

因为$ .getJSON异步返回,我发现很难使用回调函数之外的数据。因此,首先尝试将数据推送到JS数组中。如果您需要任何其他信息,请与我们联系。 TIA。

2 个答案:

答案 0 :(得分:1)

首先,从您这边无法了解您是否已在任何地方定义self

其次,您创建了一个数组forecastJSArray

您可以尝试删除自我和直接引用数组

forecastJSArray.push({
  rank: this.rank,
  rep: this.rep,
  total: this.total,
});

答案 1 :(得分:1)

var forecastJSArray在函数范围或全局范围内定义forecastJSArray

仅当self.forecastJSArray引用self并且window在全局范围内定义时,

forecastJSArray才有效。通常,您不应在全局范围内定义变量。

  

TypeError:无法读取属性' push'未定义的

告诉您selfundefined(没有任何价值)。

因此,如果在var forecastJSArray回调中的代码的可访问范围内定义了$.each(forecast, function() {,那么您可以编写:forecastJSArray.push而不使用self.