Парсинг JSON в JavaScript

485
11 марта 2017, 03:38

Добрый день. Описываю ситуацию: Нужно распарсить 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 и ничего не могу с этим поделать.

Answer 1

Ну во-первых Ваш код асинхронный. Это значит, что в 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" );
 })
READ ALSO
Очистка $scope переменной в AngularJS

Очистка $scope переменной в AngularJS

Проблема заключается в том, что происходит утечка памятиПеременная содержит данные, при уходе со страницы я выполняю destroy

235
Изменить стиль с помощью JS

Изменить стиль с помощью JS

Есть менюПри клике оно выезжает вниз

260
Как добавить webpack

Как добавить webpack

после такого запроса в терминале phpstorm: webpack/src/index

1465