2012-04-27 85 views
3

有沒有人知道,如果有可能使其中有多個對象的本地存儲當我在JavaScript中做循環?HTML5本地存儲JSON多個對象

目前我的代碼看起來是這樣的:

var albums = ''; 
var album_list = ''; 

$.each(data, function(i,item){ 
    var name = item.name; 
    albums += '<li>'+item.name+'</li>'; 

    var album_content = {name: item.name, uid: 1}; 
    var album_content = album_content+','; 

    album_list += album_content; 


}); 

var album_list = '['+album_list+']'; 
localStorage.setItem("albums", JSON.stringify(album_list)); 
var albums_l = JSON.parse(localStorage.getItem("albums")); 

$.each(albums_l, function(i,item){ 
    console.log(item.name); 
}); 

但是,這給了我一個錯誤。 任何人都有更好的解決方案,所以我只有一個本地存儲和所有的數據呢?

回答

6

您正在代碼中混合對象和字符串。您的album_content作爲對象在循環中初始化({name: item.name, uid: 1})。在下一行中,通過附加逗號將其視爲字符串。

整體使用數組來收集所有對象。使用本機對象(幾乎)總是更好,而不是試圖以某種方式模擬它們。

請嘗試使用此代碼。

var albums = ''; 
var album_list = []; 

$.each(data, function(i,item){ 
    var name = item.name; 
    albums += '<li>'+item.name+'</li>'; 

    var album_content = {name: item.name, uid: 1}; 
    // remove that line completly 
    // var album_content = album_content+','; 

    album_list.push(album_content); 

}); 


localStorage.setItem("albums", JSON.stringify(album_list)); 
var albums_l = JSON.parse(localStorage.getItem("albums")); 

$.each(albums_l, function(i,item){ 
    console.log(item.name); 
}); 
+0

謝謝!完美的作品 – 2012-04-27 09:04:21

1

有什麼不對:

var albums = ''; 
var album_list = ''; 

$.each(data, function(i,item){ 
    var name = item.name; 
    albums += '<li>'+item.name+'</li>'; 

    var album_content = {name: item.name, uid: 1}; 

    // at this point album_content is an object.. so it will be this string afterwards: "[object Object]," 
    var album_content = album_content+','; 

    album_list += album_content; //you're adding "[object Object]," 


}); 

// album_list will now look like this: '["[object Object],[object Object],"]' 
var album_list = '['+album_list+']'; 
localStorage.setItem("albums", JSON.stringify(album_list)); 
var albums_l = JSON.parse(localStorage.getItem("albums")); 

$.each(albums_l, function(i,item){ 
    console.log(item.name); 
}); 

如何做正確的:

var albums = ''; 
var album_list = []; 

$.each(data, function(i,item){ 
    var name = item.name; 
    albums += '<li>'+item.name+'</li>'; 

    var album_content = {name: item.name, uid: 1}; 

    album_list.push(album_content); 


}); 

localStorage.setItem("albums", JSON.stringify(album_list)); 
var albums_l = $.parseJSON(localStorage.getItem("albums")); 

$.each(albums_l, function(i,item){ 
    console.log(item.name); 
}); 
+0

感謝Micha,盡其所能:-) – 2012-04-27 09:04:47