Показать сообщение отдельно
  #1 (permalink)  
Старый 22.08.2014, 13:51
Новичок на форуме
Отправить личное сообщение для anton.fed Посмотреть профиль Найти все сообщения от anton.fed
 
Регистрация: 22.08.2014
Сообщений: 9

Обработка JSON. Uncaught TypeError: Cannot read property 'xdata' of undefined
Имеется JSON:
{
	"elements": {
		"group": {
			"tmpl": "tmpl-group",
			"params": [{
				"name": "main1",
				"values": ["a", "b"]
			}, {
				"name": "label1",
				"value": "id",
				"readonly": true

			}]
		},
		"el": {
			"tmpl": "tmpl-el",
			"params": [{
				"name": "main1",
				"values": ["a", "b"]
			}, {
				"name": "label1",
				"value": "id",
				"readonly": true
			}, {
				"name": "text1",
				"defvalue": ""
			}]
		}
	},
	"xdata": [{
		"id": 44,
		"type": "group",
		"paramvalues": ["a"],
		"children": [{
			"id": 14,
			"type": "el",
			"paramvalues": ["b", "name1"]
		}]
	}, {
		"id": 38,
		"type": "el",
		"paramvalues": ["a", "name2"]
	}]
}


Пытаюсь создать новый объект из ветки xdata так, чтоб занести описание типов из ветки elements (это типы) в дерево элементов в xdata. Но когда хочу получить ветку из JSON вылетает ошибка Uncaught TypeError: Cannot read property 'xdata' of undefined. Как будто не задано свойство this.loadedJSON.

Это только в хроме. В FF через debugger firebug-a проверял - все срабатывает без ошибок.

Вот на скрине дебаггер с результирующим объектом


function myobj() {
	this.loadedJSON;
	this.objtree;
};

myobj.prototype.loadJSON = function() 
{
	var that = this;
	$.getJSON('json/test.json', function(data) {
		that.loadedJSON = data;
	}).fail(function() {
		console.log("Ошибка JSON")
	});

	return this.loadedJSON;
}
myobj.prototype.prepareJSON = function() 
{
	var json = this.loadedJSON;
	var x = json.xdata; // Uncaught TypeError: Cannot read property 'xdata' of undefined 
	var y = json.elements;

	function cc(obj) {
		var accum = [];
		for (var i = 0; i < obj.length; i++) {
			accum[i] = jQuery.extend(true, {}, obj[i]);
			accum[i].index = i;
			accum[i].t = jQuery.extend(true, {}, y[obj[i].type].params);
			accum[i].tmpl = y[obj[i].type].tmpl.toString();
			if (obj[i].children)
				accum[i].children = cc(obj[i].children);
		}
		return accum;
	};
	this.objtree = cc(x);
}
x = new ft();
x.loadJSON();
x.prepareJSON();


Возможно код не очень адекватный, но я только учусь )

Последний раз редактировалось anton.fed, 22.08.2014 в 14:49.
Ответить с цитированием