2014-01-27 60 views
0

我有一個localStorage我在哪裏保存用戶已購買票的電影列表。我爲此創建了一個數組。問題在於我無法將新值推送到localStorage的這個數組中。無法將項目推入localStorage陣列

代碼:

if(window.localStorage){ 
    if(localStorage.getItem('movies_list')){ 
     var movies_list = localStorage.getItem('movies_list'); 
     console.log("Movies List: " + localStorage.getItem('movies_list')); 
     var movie = $("#movie_name").val(); 
     movies_list.push(movie); // Error here 
     localStorage.setItem('movies_list',movies_list); 
    } 
    else{ 
     var movies_list = new Array(); 
     var movie = $("#movie_name").val(); 
     movies_list.push(movie); 
     localStorage.setItem('movies_list',movies_list); 
    } 
} 

錯誤:

Uncaught TypeError: Object Movie 1 has no method 'push' 

console.log()總是返回LIST: Movie 1,似乎是下一部電影是沒有得到pushed入陣。

如何將新值推送到數組?

jsFiddle

回答

1

您添加的項目/從localStorage的獲得都是字符串。所以你需要對JSON進行編碼/解碼。

localStorage.setItem('movies_list', JSON.stringify(movies_list)); 

而且

var movies_list = JSON.parse(localStorage.getItem('movies_list')); 

http://jsfiddle.net/Kx9R6/1/

+0

在你的小提琴中,它拋出一個錯誤'Uncaught SyntaxError:Unexpected token M'。 –

+0

我重構了一些代碼。現在再試一次,如果仍然出現該錯誤,請嘗試從本地存儲中刪除'movie_list'(例如使用Chrome開發人員工具)。 – sroes

+0

對不起,它再次拋出相同的錯誤。如何從本地存儲中刪除'movie_list'? –

0

localStorage的accpets並且只存儲字符串,你不能直接保存數組。相反,您可以在保存過程中執行JSON.stringify,在檢索過程中執行JSON.parse。

var movies = ["movie1","movie2","movie3"]; 
//Saving 
localStorage.movies_list = JSON.stringify(movies); 
//Retrieving 
var list = JSON.parse(localStorage.movies_list); 
list.push("movie4");