代码之家  ›  专栏  ›  技术社区  ›  Jeff

jQuery未生成我的JSON

  •  1
  • Jeff  · 技术社区  · 11 年前

    我正在尝试从表单生成一个JSON文档。我想要的输出如下所示:

    {
        "name": "joe-pc",
        "device_type": "server",
        "os": "windows",
        "info": [
            {
                "net_info": [
                    {
                        "ip": "192.168.0.5",
                        "name": "eth0"
                    },
                    {
                        "ip": "192.168.0.28",
                        "name": "eth1"
                    }
                ]
            },
            {
                "OS_info": [
                    {
                        "name": "windows"
                    },
                    {
                        "build": "123.1.3"
                    }
                ]
            },
            {
                "whatever_info": [
                    {}
                ]
            }
        ]
    }
    

    我得到的是:

    {"info":[{}]}
    

    代码段:

    $('#top_three_next').click(function (e) {
            var json_obj = new Object();
            json_obj.name = $('#name').val(); //manditory
            json_obj.device_type = $('#device_type').val(); //manditory
            json_obj.os = $('#os').val(); //not a manditory field
            // is this not available outside the function? 
            // even if I declare json_obj as a global var?
        });
    

    完整代码:

    http://jsfiddle.net/jdell64/Tu9bB/ (从js窗格的第93行开始)。

    1 回复  |  直到 11 年前
        1
  •  2
  •   CoolEsh    11 年前

    首先,jsfiddle上的代码看起来有点乱:)

    我懂了

    var json_obj = new Object();
    

    第95行的声明。根本不需要这条线路。因为您已经在JS开头定义了空的json_obj。该声明开销了全局变量&使用回调作用域中的局部变量&回调结束后,填充在其中的所有数据都将丢失。如果删除该行,将在结尾处得到以下结构。

    {"name":"1","device_type":"2","os":"3","info":[{}]}
    

    编辑: 第191-192行对我来说也完全不清楚:

    infoList.push(infoDocs);
    json_obj.info = infoList;
    

    二者都 infoDocs & infoList 变量没有在事件处理程序函数中定义,但它们也没有全局定义!