我已经定义了一个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。
答案 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'未定义的
告诉您self
是undefined
(没有任何价值)。
因此,如果在var forecastJSArray
回调中的代码的可访问范围内定义了$.each(forecast, function() {
,那么您可以编写:forecastJSArray.push
而不使用self.
。