|
Вывод JSON Объекта из localStorage
Вобщем надо вывести все объекты из локалстоража...Если применяю $.parseJSON(); к переменной value - выдает undefined, если нет, то выводит тупо весь JSON объект из значения строкой. Что не так?
// JavaScript Document
$(document).ready(function(){
function isLocalStorageAvailable(){
try {
return 'localStorage' in window && window['localStorage'] !== null;
} catch (e) {
return false;
}
}
try {
//localStorage.setItem('foo', 'bar');
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Локальное хранилище переполнено');
}
}
$.getJSON(
'json/posts.json',
function(data){
var posts = '';
$.each(data, function(postIndex, post) {
localStorage.setItem('post_id'+post['id'], JSON.stringify(post));
posts += localStorage['post_id'+post['id']];
//var local = $.parseJSON(posts);
//alert(local);
})
var ololo = $.parseJSON(localStorage['post_id1']);
alert(ololo.title);
var obj = window.localStorage;
for(var key in obj){
value = localStorage[key];
alert(key +'=>'+value);
alert('Ошибка где-то до этой строки.');
};
for (var i = 0; i < localStorage.length; i++) {
alert(localStorage[i] + " = " + $.parseJSON(localStorage[localStorage[i]]));
$.each($.parseJSON(localStorage[localStorage[i]]), function(eIndex, e) {
alert(e.title);
});
}
//for(var i=1, len=localStorage.length; i<len; i++) {
// var value = $.parseJSON(localStorage['post_id'+i]);
// $.each(value, function(eIndex, e) {
// alert(e.title);
// });
//}
//var local = $.parseJSON(posts);
alert(posts);
//posts += localStorage.setItem('posts', JSON.stringify(data))
//var local = $.parseJSON(localStorage.getItem('posts'));
//formatposts = $.parseJSON(posts);
//alert(formatposts);
//for(i=0; i<posts.length; i++){
// alert(posts[i]);
//}
$.each(posts, function(entryIndex, entry) {
var post = '<article><header><h3>';
post += entry['title']+'</h3></header><section><p>';
post += entry['body']+'</p></section><footer>';
if(entry['tags']){
post += '<div id="tags">';
$.each(entry['tags'], function(tagIndex, tag){
post += '<span class="label">' + tag + '</span>'
});
post += '</div><div class="controls"><a class="btn btn-danger btn-mini">удалить</a></div>';
}
post += '</footer></article>';
$('#posts').append(post);
});
});
});
Вот можете посмотреть сами http://smirnoff.ho.ua/JSUI/ |
JSON !== объект.
Вы формат соблюли? |
разве? Хм...подскажите тогда в чем ошибка, как мне исправить код?
|
попробуйте превращать строку в объект
JSON.parse(..)
// или так
eval("("+ .... +")");
|
Так я же так и превращаю через $.parseJSON(), и мне выдает [Object object] вместо значений ключа, в перемечшку с кучей undefined и в самом конце один раз таки выводит заголовки
|
объекты вложенные? т.е. есть такое, что значением является объект?если да, то это плохо
|
Эм..ну собственно каждое значение JSON объект, причем в каждом есть значение, являющееся массивом. Т.к. хранилище заполняется из JSON файла. Вот код JSON файла собственно, дабы лучше понять картину:
[
{
"id": 1,
"title": "Стремящийся наибольший",
"body": "Поле направлений нейтрализует коллинеарный полином, откуда следует доказываемое равенство.",
"tags": [
"тег", "еще тег"
]
},
{
"id": 2,
"title": "Эффузивный топаз",
"body": "Поскольку плиты перестали сближаться, гейзер сдвигает кимберлит, в соответствии с изменениями в суммарной минерализации.",
"tags": [
"коренной цоколь", "дифференциация", "апатит"
]
},
{
"id": 3,
"title": "Звукорядный октавер",
"body": "Ретро монотонно диссонирует форшлаг, и здесь в качестве модуса конструктивных элементов используется ряд каких-либо единых длительностей.",
"tags": [
"конструктивный соноропериод", "движение"
]
},
{
"id": 4,
"title": "Спиральный фотон",
"body": "Любое возмущение затухает, если взрыв ненаблюдаемо искажает экранированный электрон, и это неудивительно, если вспомнить.",
"tags": [
"сверхновая", "гидродинамический удар"
]
}
]
А почему плохо? И да, если что в верху страницы собственно видно требование задания. В хранилище я сделал запись каждого поста, т.е. каждого объекта, и выглядит следующим образом: post_id1 => {"id":1,"title":"Стремящийся наибольший","body":"Поле направлений нейтрализует коллинеарный полином, откуда следует доказываемое равенство.","tags":["тег","еще тег"]} |
Здесь да, это я специально тестил и выводил отдельный пост
|
Хм...у Вас в конце перебирается переменная data в которой JSON массив, а надо же перебирать локалстораж, ведь посты будут добавлятся, удалятся и соответственно выводить надо работая ТОЛЬКО с локалсторажем. Заполнили в первый раз значениями базовыми из JSON файла, и все далее только с локалсторажем работаем
|
ошибки вот здесь :
for (var i = 0; i < localStorage.length; i++) {
alert(localStorage[i] + " = " + $.parseJSON(localStorage[localStorage[i]]));
$.each($.parseJSON(localStorage[localStorage[i]]), function(eIndex, e) {
alert(e.title);
});
}
ибо i - число, и localStorage[ число ] не существует, ибо сохраняли с ключом вида 'post_id'+post['id'] и итерация начинается с нуля, а ID'шники погут случайным образом попадаться, т.е. простой итерацией тут не спастись. но, ели хотите, можно так: i + 1. идем далее. $.parseJSON(localStorage[localStorage[i]] это что такое? допустим i исправили, localStorage["post_id"+(i+1)] возвратит строку объекта. далее получаем undefined из внешнего (первого слева) localStorage, и пытаемся из этого undefined взять JSON. ошибочка. вот так пойдёт $.parseJSON(localStorage["post_id" + (i + 1)]) |
| Часовой пояс GMT +3, время: 13:27. |
|