Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как правильно получить данные json (перевести в общую оласть видимости) (https://javascript.ru/forum/misc/58864-kak-pravilno-poluchit-dannye-json-perevesti-v-obshhuyu-olast-vidimosti.html)

Blondinka 14.10.2015 18:17

Как правильно получить данные 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);//Не сработает.

рони 14.10.2015 18:36

Цитата:

Сообщение от Blondinka
не обновляется массив jsonFile

обновляется, но вы не хотите ждать ответа сервера
медитировать тут https://learn.javascript.ru/promise

Blondinka 14.10.2015 19:22

рони, спасибо.

ruslan_mart 14.10.2015 21:36

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

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

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


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


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