function rebuildJSONObject(){
$.getJSON('services.json', function(data) {
//stof start
var input = data;
var output = { myservices: [] };
for (var key in input) {
if (input.hasOwnProperty(key)) {
for (var i = 0, hostsinfo = input[key].hostsinfo; i < hostsinfo.length; i++) {
output.myservices.push({
'nametag': key,
'hostidn': hostsinfo[i]['hostidn'],
'details': hostsinfo[i]['details'],
'currstatus': hostsinfo[i]['currstatus'],
'currstatusclass': hostsinfo[i]['currstatusclass']
});
}
}
}
//stof end
return output;
});
}
//setting it for use later in the script
var serviceJSONObject = rebuildJSONObject();
我知道函数中发生的事情工作正常,因为如果我将它应用到点击事件,它就会很迷人。不过,我宁愿将 JSON 对象加载到内存中一次,然后在客户端使用它,除非保存。然而,我的问题是在任何我调用“serviceJSONObject”的地方都会收到“未定义”错误。
那么我怎么做错了,我该如何在游戏早期定义这样的变量,以便脚本的其余部分可以使用该变量。
最佳答案
问题是在调用回调函数之前返回了output
。您应该能够使用闭包将值保存到 serviceJSONObject
:
function rebuildJSONObject(serviceJSONObject){
$.getJSON('services.json', function(data) {
//stof start
var input = data;
// Use the serviceJSONObject that is passed into rebuildJSONObject
serviceJSONObject = { myservices: [] };
for (var key in input) {
if (input.hasOwnProperty(key)) {
for (var i = 0, hostsinfo = input[key].hostsinfo; i < hostsinfo.length; i++) {
serviceJSONObject.myservices.push({
'nametag': key,
'hostidn': hostsinfo[i]['hostidn'],
'details': hostsinfo[i]['details'],
'currstatus': hostsinfo[i]['currstatus'],
'currstatusclass': hostsinfo[i]['currstatusclass']
});
}
}
}
//stof end
});
}
//setting it for use later in the script
var serviceJSONObject;
rebuildJSONObject(serviceJSONObject);
关于javascript jquery 函数这有点错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7710856/