30.06.2012, 18:10
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Вывод 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/
|
|
30.06.2012, 18:15
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
JSON !== объект.
Вы формат соблюли?
|
|
30.06.2012, 20:41
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
разве? Хм...подскажите тогда в чем ошибка, как мне исправить код?
|
|
30.06.2012, 22:47
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
попробуйте превращать строку в объект
JSON.parse(..)
// или так
eval("("+ .... +")");
|
|
30.06.2012, 23:17
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Так я же так и превращаю через $.parseJSON(), и мне выдает [Object object] вместо значений ключа, в перемечшку с кучей undefined и в самом конце один раз таки выводит заголовки
Последний раз редактировалось Философ, 30.06.2012 в 23:22.
|
|
30.06.2012, 23:31
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
объекты вложенные? т.е. есть такое, что значением является объект?если да, то это плохо
|
|
30.06.2012, 23:36
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Эм..ну собственно каждое значение 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":["тег","еще тег"]}
Последний раз редактировалось Философ, 30.06.2012 в 23:43.
|
|
30.06.2012, 23:55
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Здесь да, это я специально тестил и выводил отдельный пост
|
|
01.07.2012, 00:00
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Хм...у Вас в конце перебирается переменная data в которой JSON массив, а надо же перебирать локалстораж, ведь посты будут добавлятся, удалятся и соответственно выводить надо работая ТОЛЬКО с локалсторажем. Заполнили в первый раз значениями базовыми из JSON файла, и все далее только с локалсторажем работаем
|
|
01.07.2012, 00:06
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
ошибки вот здесь :
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)])
|
|
|
|