我看了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"]);
}
如果我理解正確的話,你推一個'Array'進入「Extract_Update」'Array'每個表單提交。這似乎是不必要的 - 爲什麼不直接推送已經處於「對象」格式的表單數據本身? 'aa.push(extractform)' – providencemac
對於可能是一個非常簡單的問題,這似乎是一個非常漫長而複雜的解釋。你可以簡化爲*只是*你的代碼問題? – Hamish
謝謝你的收穫,天意。對不起,很長的解釋,認爲我應該創造上下文。基本上,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