我定义了一个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,
});
});
})
;但是,当我运行这段代码时,它会给我一个错误:无法读取未定义的TypeError的属性“push”:无法读取未定义的属性“push”
我的最终数组应该如下所示:
[
{
"rank" : 1,
"rep" : "rep1",
"total" : 10,
}, {
//...etc
}
]如果有人能告诉我这件事出了什么问题,我会非常感激的。提前谢谢。
编辑:代码包含在oracle-jet视图模型中(它使用RequireJS视图模型),这与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数组。如果您需要更多的信息,请告诉我。蒂娅。
发布于 2017-03-21 05:11:51
首先,从您的角度来看,不可能理解您是否在任何地方定义了self。
其次,您已经创建了一个数组forecastJSArray。
您可以尝试移除自&直接引用数组。
forecastJSArray.push({
rank: this.rank,
rep: this.rep,
total: this.total,
});发布于 2017-03-21 05:17:03
var forecastJSArray在函数的作用域或全局范围中定义forecastJSArray。
self.forecastJSArray只有在self引用window并在全局范围内定义forecastJSArray时才能工作。通常,您不应该在全局范围中定义变量。
TypeError:无法读取未定义的属性“push”
告诉您self是undefined (不包含任何值)。
因此,如果var forecastJSArray为$.each(forecast, function() {回调中的代码定义了一个可访问的作用域,那么您将编写:没有self.的forecastJSArray.push。
https://stackoverflow.com/questions/42918858
复制相似问题