无法将项目推送到localStorage中的数组

时间:2014-01-27 09:51:31

标签: javascript html5

我有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

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

localStorage只接受和存储字符串,不能直接保存数组。相反,您可以在保存期间执行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");