2014-03-05 51 views
1

我想從表單生成一個JSON文檔。我想會是這個樣子的輸出:jQuery不生成我的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行開始)。

回答

2

首先你上的jsfiddle所有代碼看起來有點混亂:)

我看,則不需要此行的所有線路95

var json_obj = new Object(); 

聲明。因爲你已經在JS的開頭定義了空的json_obj。而這個聲明開銷全局變量&使用回調範圍內的局部變量&回調結束後填充的所有數據都丟失了。如果您刪除該行,則最終會得到以下結構。

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

編輯: 還行191-192是我完全不清楚:

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

兩個infoDocs & infoList變量沒有在事件處理函數中定義的,但他們也沒有全局定義!

+1

是的,至少有一個問題是隱藏全球。要使用全局,請在click函數內部刪除json_obj前面的「var」。 –

+0

對不起,亂碼。我不是一個全職的編碼員,我不知道很多約定。儘管感謝您的幫助,但我很樂意提供如何改進我的代碼(如果您需要):https://github.com/jdell64/IPACS – Jeff