2017-01-03 4 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' –

Смежные вопросы