2013-09-26 43 views
0

我看了Iterate through nested json object array和其他一些帖子,但他們似乎沒有解釋我的情況。需要迭代json數據的本地存儲陣列中存儲的json對象

我在這裏遇到的問題是,我必須將多個JSON對象存儲到本地存儲的陣列中,以防客戶端的窗體脫機並需要將多個提交存儲到本地存儲;因此當連接重新建立時,它將遍歷所有本地存儲數據,並將每個JSON對象分別提交到SQL DB中的新行中。

所有我是JSON對象的數組被存儲到localStorage的數組,但我似乎無法返回每個「{...}」對象分開,我只能用得到的字符串數組的單個值offlinExtractData [3](返回「cable_no」的「c」),而不是能夠獲取多個對象數組中的第一個JSON對象。

例子,一個完整的JSON對象,將提交給SQL數據庫看起來是這樣的,然後通過AJAX發送到PHP SQL文件:

{ 「cable_no」: 「90012」, 「section_no」 :「1」,「extract_ft」:「1」,「cable_status」:「」,「conduit_status」:「None」,「extract_date」:「2013-09-26」,「extract_team」:「 」,「extract_notes 「:」 1" }

也就是說一行數據,但是這是我的本地存儲看起來像多個表單提交後什麼:

[{"cable_no":"90012","section_no":"1","extract_ft":"1","cable_status":"Done","conduit_status":"None","extract_date":"2013-09-26","extraction_team":" ","extract_notes":"1"}, 
{"cable_no":"90012","section_no":"1","extract_ft":"2","cable_status":"Done","conduit_status":"Liner 2","extract_date":"2013-09-26","extraction_team":"E1","extract_notes":"2"}, 
{"cable_no":"90012","section_no":"1","extract_ft":"3","cable_status":"Done","conduit_status":"Liner 2","extract_date":"2013-09-26","extraction_team":"Unknown","extract_notes":"3"}, 
{"cable_no":"90012","section_no":"4","extract_ft":"4","cable_status":"Done","conduit_status":"Liner 2","extract_date":"2013-09-26","extraction_team":"Unknown","extract_notes":"4"}, 
{"cable_no":"90012","section_no":"1.2.3","extract_ft":"333","cable_status":"Done","conduit_status":"Liner 2","extract_date":"2013-09-26","extraction_team":"Unknown","extract_notes":"5"}] 

each {...},{...},{...} JSON對象有其自己的唯一一行數據,我需要能夠相應地分別返回每個{...}並通過我已經設置的AJAX函數提交。我的問題是,如何遍歷每個對象以便返回整個數據段,而不僅僅是整個字符串的位?那有意義嗎?

這裏是吐出來的是上述數據的代碼:

//Global variables 
var extractform = { 
'cable_no' : "", 
'section_no' : "", 
'extract_ft' : "", 
'cable_status' : "", 
'conduit_status' : "", 
'extract_date' : "", 
'extraction_team' : "", 
'extract_notes' : "" 
} 

//initially set up the store 
if (!localStorage["Extract_Update"]) { 
localStorage["Extract_Update"] = JSON.stringify([]); 
} 
//Now return locally stored values, if set 
if (localStorage["Extract_Update"]) { 
var offlinExtractData = localStorage["Extract_Update"]; 
console.log("Array Length: " + localStorage["Extract_Update"].length + "\nParsed Data: " + offlinExtractData); 
console.log(offlinExtractData[3]); 
} 

function update_extractform() { 
$.ajax({ 
    type: 'POST', 
    //url: './php/update_extractform.php', 
    timeout: 8000, //8 seconds 
    data: extractform, 
    success: function(data) { 
       //Save data (array) and push new data into existing web storage 
       var aa = JSON.parse(localStorage["Extract_Update"]); 
       console.log(aa); 
       aa.push([ extractform ]); 
       localStorage["Extract_Update"] = JSON.stringify(aa); 
       console.log("Submitted (offline): " + localStorage["Extract_Update"]); 
} 
+0

如果我理解正確的話,你推一個'Array'進入「Extract_Update」'Array'每個表單提交。這似乎是不必要的 - 爲什麼不直接推送已經處於「對象」格式的表單數據本身? 'aa.push(extractform)' – providencemac

+0

對於可能是一個非常簡單的問題,這似乎是一個非常漫長而複雜的解釋。你可以簡化爲*只是*你的代碼問題? – Hamish

+0

謝謝你的收穫,天意。對不起,很長的解釋,認爲我應該創造上下文。基本上,offlinExtractData [3]的控制檯日誌從第一個JSON對象的{「cable_no」:「90012」......}返回「c」,我想要offlinExtractData [3]將第三個JSON對象返回爲一個整體,所以我會得到{「cable_no」:「90012」,「section_no」:「1」,「extract_ft」:「3」,「cable_status」:「完成」,「conduit_status」:「內線2」 ,「extract_date」:「2013-09-26」,「extract_team」:「未知」,「extract_notes」:「3」}。我怎樣才能做到這一點?謝謝!! – jflay

回答

1

如果你有一個JSON對象的字符串表示,一個辦法把它變成一個JavaScript對象通過迭代是:

eval(offlinExtractData)[3] 

在IE 8 +,火狐3.1以上版本的Safari 4+,鉻3+,和Opera 10.5+(基於Browser-native JSON support (window.JSON)),您也可避免EVAL使用:

JSON.parse(offlinExtractData)[3] 

爲了獲得更大的支持,您還可以使用外部JSON解析器如https://github.com/douglascrockford/JSON-js/blob/master/json2.js

+0

男人你搖滾!這太簡單了......當然,解析json字符串......我是JSON的新手,但是知道足夠了解我錯在哪裏的愚蠢。現在我可以使用eval(offlinExtractData).length返回「5」,並且有我的計數功能? – jflay

+0

排序的新問題,也許需要創建一個新的話題:現在,我怎麼開始從localStorage的清理出每個JSON對象,因爲它通過每一個迭代?我的for循環會清除所有本地存儲,然後才能遍歷每個對象。我只設置了「Extract_Data」的單個項目,因此似乎無法刪除本地存儲項目中的特定內容。 – jflay