Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.06.2012, 17: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/
Ответить с цитированием
  #2 (permalink)  
Старый 30.06.2012, 17:15
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

JSON !== объект.

Вы формат соблюли?
Ответить с цитированием
  #3 (permalink)  
Старый 30.06.2012, 19:41
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

разве? Хм...подскажите тогда в чем ошибка, как мне исправить код?
Ответить с цитированием
  #4 (permalink)  
Старый 30.06.2012, 21:47
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

попробуйте превращать строку в объект
JSON.parse(..)
// или так 
eval("("+ .... +")");
Ответить с цитированием
  #5 (permalink)  
Старый 30.06.2012, 22:17
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Так я же так и превращаю через $.parseJSON(), и мне выдает [Object object] вместо значений ключа, в перемечшку с кучей undefined и в самом конце один раз таки выводит заголовки

Последний раз редактировалось Философ, 30.06.2012 в 22:22.
Ответить с цитированием
  #6 (permalink)  
Старый 30.06.2012, 22:31
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

объекты вложенные? т.е. есть такое, что значением является объект?если да, то это плохо
Ответить с цитированием
  #7 (permalink)  
Старый 30.06.2012, 22: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 в 22:43.
Ответить с цитированием
  #8 (permalink)  
Старый 30.06.2012, 22:55
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Здесь да, это я специально тестил и выводил отдельный пост
Ответить с цитированием
  #9 (permalink)  
Старый 30.06.2012, 23:00
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Хм...у Вас в конце перебирается переменная data в которой JSON массив, а надо же перебирать локалстораж, ведь посты будут добавлятся, удалятся и соответственно выводить надо работая ТОЛЬКО с локалсторажем. Заполнили в первый раз значениями базовыми из JSON файла, и все далее только с локалсторажем работаем
Ответить с цитированием
  #10 (permalink)  
Старый 30.06.2012, 23:06
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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)])
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
foreach JSON объекта tazododu jQuery 6 01.09.2016 15:21
сортировка объекта JSON kuzroman jQuery 3 29.09.2011 13:46
Вывод переменного по количеству элементов массива из json ArmagedDance Элементы интерфейса 4 08.06.2011 09:45
JSON. Как в callback функции изменить свойство объекта? master_alf jQuery 10 22.04.2010 16:08
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 18:00