为什么我的本地存储不起作用?

时间:2014-02-20 19:03:08

标签: javascript jquery json local-storage

我正在尝试localStore历史但它不起作用。我尝试了JSON.stringify和一个名为JStorage的脚本,但我无法工作。

function updateHistory(video) {
getHistory();
blacklist[video["id"]] = true;
myhistory.push(video);
var html = "<li class=\"history\">" +
    "<img class= \"img-rounded\" src=\"{0}\"/>" +
    "<p><b title=\"{2}\"><a class=\"extendedLink\" href=\"javascript:watchHistoricVideo(\'{1}\');\"><span></span>{2}</a></b><br>" +
    "by {3}<br>" +
    "{4} | {5} views</p>" +
    "</li>";

$("#myhistory").prepend(html.format(video["thumbnail"],
    video["id"],
    video["title"],
    video["uploader"],
    video["length"],
    video["views"]));
saveHistory();
}

function saveHistory() {
localStorage.setItem(myhistory, myhistory.innerHTML);
}

(警报确实显示)

function getHistory() {
localStorage.getItem(myhistory);
alert("working");
}

1 个答案:

答案 0 :(得分:0)

关键是,不是存储html部分,而是更好地存储video对象,您可以根据他们的id存储视频,而不是使用javascript对象的数组:

function setVideo(video) {
    var videos = JSON.parse(localStorage.getItem("myhistory") || "{}");
    videos[video["id"]]=video;
    localStorage.setItem("myhistory", JSON.stringify(videos));
}
function getVideos() {
    var myhistory = localStorage.getItem("myhistory");
    if(!myhistory) return {};
    else return JSON.parse(myhistory);
}
function getVideo(id) {
    var myhistory = localStorage.getItem("myhistory");
    if(!myhistory) return null;
    var videos = JSON.parse(myhistory);
    return videos[id] || null;
}

现在您可以使用getVideo按ID检索视频对象。您可以将显示视频的部分分开,例如:

function showVideo(video) {
    blacklist[video["id"]] = true;
    var html = "<li class=\"history\">" +
        "<img class= \"img-rounded\" src=\"{0}\"/>" +
        "<p><b title=\"{2}\"><a class=\"extendedLink\" href=\"javascript:watchHistoricVideo(\'{1}\');\"><span></span>{2}</a></b><br>" +
        "by {3}<br>" +
        "{4} | {5} views</p>" +
        "</li>";

    $("#myhistory").prepend(html.format(video["thumbnail"],
    video["id"],
    video["title"],
    video["uploader"],
    video["length"],
    video["views"]));
}

假设您要在历史记录中显示整个视频:

var videos = getVideos();
for(var id in videos){
    showVideo(videos[id]);
}