Я довольно новичок в разработке javascript и jquery. У меня есть таблица значений, которую я извлекаю в PHP и форматирую как строку JSON, потому что JSON выглядит как отличный способ получить данные в javascript. Но у меня проблемы с обращением к переменной javascript.

Данные в формате JSON представлены в очень простом формате. Это выглядит так:

[
    {"id":"1","name":"Bob","haircolor":"brown"},
    {"id":"2","name":"Carol","haircolor":"Red"}
]

И так далее. Ни одна из записей не является сложной. Это просто плоские ряды данных.

Я использую $ .getJSON () из JQuery, чтобы поместить данные в переменную следующим образом:

var people;
$.getJSON("php/getpeople.php", function(data){ //getpeople.php generates the JSON
    people.push(data);
});

Согласно console.log (data), объект 'data' заполняется содержимым моей строки JSON. Но push генерирует эти ошибки в консоли javascript:

Uncaught TypeError: Cannot read property 'length' of undefined
Uncaught TypeError: Cannot call method 'push' of undefined

Что мне не хватает? И есть ли какая-либо другая информация, которая вам нужна, чтобы помочь мне в этом? Я остановился на этом проекте из-за этой проблемы, и я слишком новичок в JavaScript, чтобы понять это.

4
Damon Kaswell 26 Янв 2013 в 18:57

5 ответов

Лучший ответ

Переменная people должна быть массивом. Измените первую строку на

var people = [];

На данный момент "people" просто не определен, а метод .push () работает только с массивами.

3
Didatus 26 Янв 2013 в 15:00

Если ваш PHP записывает вывод так:

[
    {"id":"1","name":"Bob","haircolor":"brown"},
    {"id":"2","name":"Carol","haircolor":"Red"}
]

Вам необходимо назначить всю эту структуру people:

var people;
$.getJSON("php/getpeople.php", function(data){ //getpeople.php generates the JSON
    people = data;
});

// note that you can't access anything inside people here
// only when the json has been processed
2
Ja͢ck 26 Янв 2013 в 15:10

Вы можете попробовать это:

$.getJSON("php/getpeople.php", function(data){ //getpeople.php generates the JSON
  $.each(data, function(i, people){
     console.log(people);
  });
});    
1
Jai 26 Янв 2013 в 16:09

Попробуйте инициализировать переменную people как массив

var people = []
1
Can Geliş 26 Янв 2013 в 15:00

Попробуйте определить вашу переменную как массив, прежде чем нажать на нее:

var people = new Array();
1
hohner 26 Янв 2013 в 14:58