2014-01-27 63 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");