Добрый день. Описываю ситуацию: Нужно распарсить JSON с помощью JavaScript. Делаю вот так:
var items = [];
jQuery.getJSON( url, function( json ) {
jQuery.each(json.posts, function(key, index) {
loc = index.custom_fields.map_coords[0];
items.push(loc);
});
});
console.log(items);
Если пытаюсь вывести console.log(items[0]), то получаю undefined.
Возможно уже глаз замылился, но я не понимаю как мне добраться до значений.
Дело в том, что эти значения потом должны использоваться, а я получаю undefined и ничего не могу с этим поделать.
Ну во-первых Ваш код асинхронный. Это значит, что в items будут значения только после того, как выполнится запрос.
То есть Ваш код должен будет выглядеть так:
var items = [];
jQuery.getJSON( url, function( json ) {
jQuery.each(json.posts, function(key, index) {
loc = index.custom_fields.map_coords[0];
items.push(loc);
});
console.log(items);
});
Во-вторых. Не факт что он у Вас выполниться - нужно добавить обработку ошибок:
var items = [];
jQuery.getJSON( url, function( json ) {
jQuery.each(json.posts, function(key, index) {
loc = index.custom_fields.map_coords[0];
items.push(loc);
});
console.log(items);
})
.fail(function() {
console.log( "error" );
})
Вопрос как работать с item дальше. Вариантов несколько - через обещания или callback-функции.
Пример с callback-функцией.
var items = [],
callbacks = $.Callbacks();
callbacks.add(function () {
console.log(items);
})
jQuery.getJSON( url, function( json ) {
jQuery.each(json.posts, function(key, index) {
loc = index.custom_fields.map_coords[0];
items.push(loc);
});
callbacks.fire();
console.log(items);
})
.fail(function() {
console.log( "error" );
})
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости