2016-11-28 8 views
1

Im имея небольшую проблему, делая эту работу:JQuery, JSON массив толчок

Вот мой JSON массив вытащил с помощью AJAX:

{ 
    "message": [{ 
     "title": "Account", 
     "id": 1 
    }, { 
     "title": "Content", 
     "id": 2 
    }, { 
     "title": "Other", 
     "id": 3 
    }] 
} 

здесь является JavaScript:

var items = []; 
$.get("settings.php", { 
     getlink: 1, 
    }, function(json) { 
     $.each(json.message, function() { 
      items.push(this); 
     }); 

},"json"); 

console.log(items) 

Но для почему-то массив элементов всегда пуст [] Я вижу в firebug, json возвратил массив, но я не могу его нажать.

+0

console.log может происходить до того запрос прибудет закончен, попробуйте добавить тайм-аут, чтобы проверить, если он работал. – jmona789

+0

Добавьте неполный раздел и поставьте console.log. – nurdyguy

ответ

3

Используйте index, value, что $.each возвращение:

$.each(json.message, function(index, value) { 
    items.push(value); 
}); 

Примечание:$.each() отличается .each().

Надеюсь, это поможет.

+0

Хорошо, теперь я вижу свою проблему. Если я поставлю console.log (items); внутри ajax get, то я вижу результаты, но я хочу иметь доступ к массиву элементов вне вызова ajax. – Alko

+0

Да, вы не могли получить доступ к результату сразу же после того, как '$ .get()' является асинхронным, взгляните на [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/ 14220321/как-делать-я-возвратный-ответ-с-с-асинхронного-вызова). –

2

Вам необходимо передать параметры функции $.each и нажать этот объект в свой массив.

var json = { 
 
    "message": [{ 
 
     "title": "Account", 
 
     "id": 1 
 
    }, { 
 
     "title": "Content", 
 
     "id": 2 
 
    }, { 
 
     "title": "Other", 
 
     "id": 3 
 
    }] 
 
} 
 

 
var items = []; 
 
$.each(json.message, function(index, item) { 
 
    items.push(item); 
 
}); 
 

 
console.log(items)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>