javascript jquery 函数这有点错误吗?

标签 javascript jquery function

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/

相关文章:

javascript - 在表单提交时保持选项卡打开 - 无需 Ajax

javascript - 灯箱问题和垂直对齐

jquery - 修改折叠插件以使用 select = selected

jquery - 使用 jQuery 复制选项和选项组

javascript - 如何减少javascript对象只包含接口(interface)的属性

javascript - 网络工作人员代表团(子工作人员)不工作

api - 跨子域ajax调用

Bash 控制流使用 ||在功能上,用 set -e

bash - 如何通过 find -exec 使用 .bashrc 中定义的 bash 函数

swift - 这个语法在 Swift 中是什么意思?