Обход элементов localStorage
Доброго времени суток. Пишу корзину, которая будет храниться в localStorage. Во время загрузки страницы сначала получаются все ключи, по которым товар были записаны в localStorage:
function indexStorage(){ list = []; for (var name in localStorage){ list.push(name) } return list; } а затем по этим ключам получаются данные и дальше обрабатываются (формируется корзина, кнопки "Купить" заменяются на "Уже в корзине" и так далее). Проблема возникает во время обхода списка ключей: for (var item in indexStorage()){ var dict = localStorage.getItem(item); alert(dict) } С таки кодом после загрузки страницы выводится значение nullдля всех ключей. Я раньше с javascript-ом особо не сталкивался, работал только с серверной частью, а сейчас решил переписать серверный вариант корзины на javascript. Самому кажется, что ошибка примитивная и я где-то неправильно делаю обход списка, но разобраться никак не могу. Заранее благодарен за помощь. |
<table> <tbody id="backet"></tbody> </table> (function() { var td = ''; for(var i in localStorage) if(typeof localStorage[i] == 'string') td += '<tr><td>' + i + '</td><td>' + localStorage[i] + '</td></tr>'; document.getElementById('backet').innerHTML = td; })(); |
Пара вопросов.
Насколько я понял, после условия цикла идет проверки, является ли значение ключа строкой. У меня это не строка. Я передаю объект, а точнее словарь со значением имени, цены и так далее. Нужна ли эта проверка для работы функции? И второй вопрос. Фигурные скобки вокруг тела цикла случайно пропущены или так и должно быть? |
berserk10, нельзя объекты хранить в localStorage, можно либо число, либо строку.
Цитата:
Записывайте все товары прямо в localStorage и извлекайте их кодом (см. выше). localStorage.chocolate = '3'; localStorage.yogurt = '5'; |
То есть ошибка именно из-за того, что хранится объект? Значит если я правильно понял, то для каждого товара нужно либо делать несколько записей по ключам типа id-цвет-имя, id-цвет-цена, либо все записывать в строку, а потом обрабатывать её на сервере. Что-то вроде словаря хранить никак нельзя?
|
Цитата:
|
Как вариант, Вы можете передавать всё строкой:
localStorage.chocolate = 'с орехом|5 шт.|100 рублей'; А затем разбивать всё на массив и записывать в объект: var basket = {}; for(var i in localStorage) if(typeof localStorage[i] == 'string') basket[i] = localStorage[i].split('|'); alert(basket.chocolate); |
Всё понял. Спасибо за помощь.
|
Ruslan_xDD, зачем же велосипедить. Есть же JSON.stringify()/JSON.parse()
|
Часовой пояс GMT +3, время: 18:39. |