2017-01-03 86 views
-3

在我的應用程序中,我有2個函數與localStorage一起工作。 當我添加第一個和第二個項目時,它工作正常,但是當它是第三個項目時,它會給出錯誤。如何從localStorage獲取物品?

這裏的功能是:

w.getLocalStorage = function() { 
    var c = localStorage.getItem('cities'); 
    var arr = []; 
    arr.push(c); 
    return c ? arr : []; 
} 

w.setLocalStorage = function(data, googleData, cities, name) { 
    if (data) { 
     city.name = data.name; 
     city.coord.lat = data.coord.lat; 
     city.coord.lon = data.coord.lon; 
     cities.push(JSON.stringify(city)); 
     // console.log(city); 
     localStorage.setItem("cities", cities); 

    } else if (googleData) { 
     city.name = name; 
     city.coord.lat = googleData.results[0].geometry.location.lat; 
     city.coord.lon = googleData.results[0].geometry.location.lng; 
     console.log('cities', cities); 
     cities.push(JSON.stringify(city)); 
     // console.log(cities, city); 
     localStorage.setItem("cities", cities); 
    } 
} 

下面是它返回的第2項:

Array[1] 
0 : "{"name":"Pushcha-Voditsa","coord":{"lat":50.45,"lon":30.5}}" 
1 : "{"name":"Kyiv","coord":{"lat":50.4501,"lon":30.5234}}" 

這裏是當添加什麼第三個項目:

Array[1] 
0 : "{"name":"Pushcha-Voditsa","coord":{"lat":50.45,"lon":30.5}}, {"name":"Kyiv","coord":{"lat":50.4501,"lon":30.5234}}" 
1 : "{"name":"Kyiv","coord":{"lat":50.4501,"lon":30.5234}}" 

我該如何解決這個問題?

+2

「它提供了一個錯誤」也許錯誤是爲了提供信息: - ?它說什麼? –

+0

請務必先閱讀文檔。從https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API: 「鍵和值始終是字符串」。你需要使用像json api – oligofren

回答

1

,你可以只在localStorage的存儲串,堅持使用對象方法JSON.stringify()和檢索利用JSON.parse()來解析JSON字符串構建JavaScript值或對象轉換他們字符串化格式。

以下是需要注意的代碼片段。您應當保存字符串化cities數據

cities.push(city); 
localStorage.setItem("cities", JSON.stringify(cities)); 

雖然檢索,分析它的JavaScript對象

var cities = localStorage.getItem('cities'); 
var c = cities ? JSON.parse(cities) || []; 
+1

這樣的字符串轉換值。答案很好,但只是爲了澄清:你不能直接在localstorage中保存一個對象,所以你需要將它轉換爲'String'。一旦你獲得了'String',你就可以安全地存儲它。然後檢索它,你應該再次將'String'轉換爲一個對象。這就是爲什麼你需要函數'JSON.parse'和'JSON.stringify' –