2011-12-20 52 views
0

在它最簡單的形式:localStorage的與Json.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'變爲空...

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

這個^會輸出'bingo!'到日誌(在Firefox中),但setItem不會更新localStorage。如果我重播的比賽,它會爲空,如果我不的getItem前再次setItem ...

這將觸發正確,以及...

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

但setItem不會更新localStorage的.. ..和如果我打F5和重播的比賽這將是空

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

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

如果我去我的主要更新()循環,並提出:

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

任何人看到任何錯誤,或有任何其他測試我可以做?

playerInventory [lootArray [0]]擁有我想要使用的數字,與localstorage比較,當它更高時更新到localstorage ....我使用該對象以當前值更新屏幕上的div,所以我知道它持有我想要保存/恢復的整數.................................

我剛剛在IE中測試過,它根本不起作用:錯誤:即使在本文頂部的基本第一部分也會引發錯誤。

SCRIPT5007:無法獲取財產「的getItem」的價值:目標是 null或undefined

我可以設置在同一個函數的項目使用的getItem之前,它顯然不是空在那但它並沒有超越這一點......

回答

0

我在處理項目時遇到了類似的問題。我注意到,當我試圖運行我的文件時,我會不斷收到空值或未定義的錯誤。一旦我將我的項目放在服務器上,它就可以工作。

此外,您已經有一個檢索索引的變量。嘗試將其用於檢查,如果分數較高,則設置新分數,如果不是,則將檢索到的索引設置回本地存儲。

對於IE的說明,如果您在嘗試getItem時出現錯誤,IE將不會通過當前方法/函數中的錯誤。在IE中嘗試getItem時,試着繞過它。 我希望這可以幫助。

而且,嘗試使用

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

,因爲你已經創建的變量。