Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.10.2015, 18:17
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Как правильно получить данные json (перевести в общую оласть видимости)
Здравствуйте. Хочу создать метод для получения данных и несколько методов для их обработки. Проблема в том, что после вызова libApp.getData() не обновляется массив jsonFile, хотя alert(jsonFile[4].name) внутри libApp.getData() работает.
var jsonFile = [];
var libApp = {
    getData: function() {
        $.getJSON('authors.json', function(data) {
			alert(data[0].name);//Агата Кристи
			jsonFile = data;
			alert(jsonFile[4].name);//Джек Лондон
			return jsonFile;
		});
	},

    displayBooksList: function() {
		libApp.getData();
		alert(jsonFile[4].name);//Консоль: TypeError: jsonFile[4] is undefined, alert не сработает 
	}

};

libApp.displayBooksList();
alert(jsonFile[0].name);//Не сработает.
Ответить с цитированием
  #2 (permalink)  
Старый 14.10.2015, 18:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от Blondinka
не обновляется массив jsonFile
обновляется, но вы не хотите ждать ответа сервера
медитировать тут https://learn.javascript.ru/promise
Ответить с цитированием
  #3 (permalink)  
Старый 14.10.2015, 19:22
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

рони, спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 14.10.2015, 21:36
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Blondinka, а что мешает повесить функцию, которая находится в глобальной области видимости? При правильном подходе тут никакие promise не нужны.

function getJSONData(jsonFile) {
	//Работаем с данными
	libApp.displayBooksList();
};

var libApp = {
	getData: function() {
		$.getJSON('authors.json', getJSONData);
	},
	displayBooksList: function() {
		libApp.getData();
		alert(jsonFile[4].name);
	}
};


Да и вообще, такие вещи нужно делать "классом".
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить данные из iframe в буфер обмена? abo06 Events/DOM/Window 2 20.07.2015 00:17
как правильно получить ответ аяксом imediasun1 Элементы интерфейса 5 04.03.2014 15:57
Как правильно отправлять данные Mukhtar AJAX и COMET 9 05.03.2013 09:56
Как правильно получить введенные данные в поле? buket jQuery 11 11.04.2010 19:59
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20