使用Json.stringify的LocalStorage不会持久化

时间:2011-12-20 16:42:10

标签: json local-storage stringify

以最简单的形式:

localStorage.setItem('index0', JSON.stringify(playerInventory[lootArray[0]]));

var retrievedIndex0 = localStorage.getItem('index0');
console.log('retrieved0:'+retrievedIndex0 );  //Displays correct amount

所以我认为它有效,但是如果我在使用getItem之前没有立即setItem,它会返回null,或者如果我是setItem,则点击F5,'index0'变为null ...

if(localStorage.getItem('index0') <  playerInventory[lootArray[0]]) { 
console.log('bingo! '); 
localStorage.setItem('index0', JSON.stringify(playerInventory[lootArray[0]])); }

这将^输出'宾果!'进入日志(在firefox中),但是setItem不更新localStorage。如果我重播游戏,如果我在getItem之前没有再次setItem那么它将为null ...

这也会正确启动......

var oldscore = localStorage.getItem('index0');
var newscore = playerInventory[lootArray[0]]; 
if(oldscore < newscore) { console.log('new high score');}

但是setItem不会更新localStorage ....如果我点击f5并重放游戏它将为null

if(oldscore < newscore) { 
console.log('new high score'); //This fires

localStorage.setItem('index0', JSON.stringify(playerInventory[lootArray[0]])); //this doesnt
}

如果我转到我的主update()循环,并输入:

console.log(localStorage.getItem('index0')); //returns null
console.log(localStorage.getItem.index0);  //returns undefined

任何人都看错了,或者我可以做任何其他测试?

playerInventory [lootArray [0]]持有我想要使用的数字与localstorage比较,当更高时更新到localstorage ....我使用该对象用我当前的值更新屏幕上的div,所以我知道它持有我要保存/恢复的整数.................................

我刚刚在IE中进行了测试,它根本无法正常工作:即使是这篇文章顶部的基本第一部分也会引发错误。

  

SCRIPT5007:无法获取属性'getItem'的值:object is   null或undefined

我可以在使用getItem之前将该项设置在同一个函数中,并且在那一刻它显然不是null但是它不会持续超过这一点......

1 个答案:

答案 0 :(得分:0)

我在处理项目时遇到类似错误的问题。我注意到当我试图运行我的文件时,我会继续得到null或undefined的错误。一旦我将项目放在服务器上,就可以了。

此外,您已经拥有检索到的索引的变量。尝试将其用于支票,然后,如果分数较高,则设置新分数,如果不是,则将检索到的索引设置回本地存储。

IE的注释,如果你在尝试getItem时遇到错误,IE将不会传递当前方法/函数中的错误。当在IE中尝试getItem时,抛出一个try catch。 我希望这可以提供帮助。

另外,请尝试使用

localStorage.setItem('index0', JSON.stringify(newscore));

因为您已经创建了变量。