使用JS从LocalStorage加载的问题

时间:2017-05-09 09:04:04

标签: javascript local-storage

//Set Variables
var cookies = 0;
var cursors = 0;
var prestige = 0;
var cursorCookies = cursors * 0.1;
var save = {
    cookies: cookies,
    cursors: cursors,
    prestige: prestige
}

function loadgame(){
var savegame = JSON.parse(localStorage.getItem("save"));
 if (typeof savegame.cookies !== "undefined") cookies = savegame.cookies;
 if (typeof savegame.cursors !== "undefined") cursors = savegame.cursors;
 if (typeof savegame.prestige !== "undefined") prestige = savegame.prestige; 
}
onload(loadgame());

function round(value, decimals) {
  return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}

function CookieClick(number)
{
  cookies = cookies + number;
  document.getElementById("cookies").innerHTML = round(cookies,2)
}
function buyCursor(){
    var cursorCost = Math.floor(10 * Math.pow(1.1,cursors));     //works out the cost of this cursor
    if(cookies >= cursorCost){                                   //checks that the player can afford the cursor
      cursors = cursors + 1;                                   //increases number of cursors
      cursorCookies = cursors * 0.1;
        cookies = cookies - cursorCost;                          //removes the cookies spent
        document.getElementById('cursors').innerHTML = cursors;  //updates the number of cursors for the user
        document.getElementById('cookies').innerHTML = cookies;  //updates the number of cookies for the user
    }
    var nextCost = Math.floor(10 * Math.pow(1.1,cursors));       //works out the cost of the next cursor
    document.getElementById('cursorCost').innerHTML = nextCost;  //updates the cursor cost for the user
}




window.setInterval(function(){
CookieClick(cursorCookies); 
localStorage.setItem("save",JSON.stringify(save)); 
document.getElementById('saveinfo').innerHTML = "Saved: " + Date();
}, 1000);

这是我第一次使用javascript和localstorage,所以请耐心等待,谢谢:)

我现在正在尝试的是加载我正在保存的3个变量,但有些东西并不正确。 我的测试:http://atz-exportforce320313.codeanyapp.com/

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

正如我在facebook messenger中指出的那样:

如果您访问尚未创建的localStorage中的变量,.getItem()将只返回undefined
如果你通过undefined管道JSON.parse(),它只会返回null 要解决此问题,您只需在尝试使用它之前检查JSON.parse()的响应。

一个简单的例子:

var savegame = JSON.parse(localStorage.getItem('save'));
if (savegame === null) {
    // initialize default values here or simply abort further execution
    return;

    // if cookies, cursors and prestige are global variables you can access them through window:
    var variables = ['cookies', 'cursors', 'prestige'];

    variables.forEach(function(name) {
        if (name in savegame) window[name] = savegame[name];
    });
}

现在另外你试图通过这一行保存国家:
localStorage.setItem("save",JSON.stringify(save));
由于您没有将变量写入save,因此无法正常工作 你必须首先从全局变量中将它们添加到一起,如:

var variables = ['cookies', 'cursors', 'prestige'];
variables.forEach(function(name) {
    save[name] = window[name];
});
localStorage.setItem('save', JSON.stringify(save));

PS:
一般来说,我不建议在全局范围内定义你的东西

答案 1 :(得分:0)

好吧终于要调试你的问题了。您的代码无法正常工作的原因是,在第一次启动时,您的本地存储中绝对没有任何内容。

因此,您必须首先检查从localstorage检索的值是否为空。

由于此处存在问题,您的setinterval根本没有被调用,因此没有发生存储。

var savegame = JSON.parse(localStorage.getItem("save"));
 if (savegame !== null && typeof savegame.cookies !== "undefined") cookies = savegame.cookies;
 if (savegame !== null && typeof savegame.cursors !== "undefined") cursors = savegame.cursors;
 if (savegame !== null && typeof savegame.prestige !== "undefined") prestige = savegame.prestige; 
}

如果你已经解决了第一个问题并且仍然想知道为什么加载的存储显示所有值0,那么因为你永远不会更新你的 save 变量。这样做,你就可以使你的代码正常工作