Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обработка JSON. Uncaught TypeError: Cannot read property 'xdata' of undefined (https://javascript.ru/forum/misc/49648-obrabotka-json-uncaught-typeerror-cannot-read-property-%27xdata%27-undefined.html)

anton.fed 22.08.2014 15:48

Цитата:

Сообщение от skrudjmakdak
хотя подождите, пропишите еще так:
1 $.getJSON('json/test.json', function(data) {
2 console.log(data);
3 that.loadedJSON = data;
4 }).fail(function() {


имхо не хватает метода done

в консоль вывелся json объект

сделал вывод через done
myobj.prototype.loadJSON = function() 
{
	var that = this;
	$.getJSON('json/test.json')
	.done(function(data){
		console.log(data);
		that.loadedJSON = data;
	})
	.fail(function() {
		console.log("Ошибка обработки JSON")
	});

	//return this.loadedJSON;
}

Все то же самое - ошибка в той же строке : Uncaught TypeError: Cannot read property 'xdata' of undefined

WorM32 22.08.2014 15:50

Вот нагородили-то )

Естесно он будет undefined, тк ваш запрос не успевает завершиться, а вы уже запрашиваете результат в следующей строке.

skrudjmakdak 22.08.2014 15:51

чудеса, да и только. можете кинуть ваше творение полностью, хочу посмотреть

skrudjmakdak 22.08.2014 15:52

WorM32,
точняк))) чет под вечер туплю

anton.fed 22.08.2014 15:52

WorM32,
Подскажите как сделать тогда.

skrudjmakdak 22.08.2014 15:56

как то так))
$.getJSON('json/test.json', function(data) {
        that.loadedJSON = data;
that.prepareJSON();
    }).fail(function() {

WorM32 22.08.2014 16:01

anton.fed,
уже подсказали один из вариантов)

anton.fed 22.08.2014 16:18

Цитата:

Сообщение от skrudjmakdak (Сообщение 327103)
как то так))
$.getJSON('json/test.json', function(data) {
        that.loadedJSON = data;
that.prepareJSON();
    }).fail(function() {

да так работает Спасибо!
Но как теперь мне обращаться к объекту если он не успевает загрузить JSON
тут например консоль покажет undefined , т.к. json еще не загрузился.
x = new myobj();
x.loadJSON();
console.log(JSON.stringify(x.xdata,null,'  '));
/**/


как тут быть?

skrudjmakdak 22.08.2014 16:23

можно сделать функцию обратного вызова:
....
myobj.prototype.loadJSON = function(callback) 
{
	var that = this;
	$.getJSON('json/test.json', function(data) {
		that.loadedJSON = data;
		that.prepareJSON();
if (typeof callback == 'function')
	callback(that, true);
	}).fail(function() {
		console.log("Ошибка JSON");
if (typeof callback == 'function')
	callback(that, false);
	});

	return this.loadedJSON;
}
......
x = new ft();
x.loadJSON(function (obj, success) {
//actions
});

anton.fed 22.08.2014 17:02

Если так:
x.loadJSON(function (obj, success) {
//actions
});

то получается x.loadJSON - это можно сказать инициалиация объекта, все действия с объектом загруженным из json я смогу делать только внутри этой функции?


Часовой пояс GMT +3, время: 03:08.