Мне неловко спрашивать, но я свободно признаю, что я – нескромный разработчик Javascript, и я просто не могу понять это. Надеюсь, это будет мертво просто для кого-то другого, и я хочу поблагодарить всех здесь заранее за помощь, которую этот сайт постоянно предоставляет мне.
Пару дней назад я задал этот вопрос и больше не получаю эту ошибку. Но я столкнулся с стеной, пытаясь фактически получить доступ к данным, хранящимся в переменной. Мой JSON выглядит так:
[ {"id":"1","name":"Bob","haircolor":"Brown"}, {"id":"2","name":"Carol","haircolor":"Red"} ]
Он переходит в переменную вроде этого:
var people=[]; $.getJSON("php/getpeople.php", function(data){ //getpeople.php generates the JSON people.push(data); });
Благодаря инициализации людей как массива, я больше не получаю сообщений об ошибках. Но я не могу получить доступ к содержимому людей. people.length
возвращает 0, а people[0]
и people[1]
не определены.
Это там, я знаю, что все это есть, но у меня есть дьявол времени, выясняя, где.
Попробуйте следующее: http://jsfiddle.net/hUq7k/
$.getJSON("php/getpeople.php", function(data){ //getpeople.php generates the JSON $.each(data, function(i, people){ console.log(people.id); //<------this should output "1, 2" }); });
убедитесь, что вы получаете response data
.
people
получают значения только после события ajax.
Вызовите некоторую функцию обратного вызова после того, как вы поместите данные в массив people
.
Следующее должно работать, если сервер фактически возвращает ожидаемый JSON:
$.getJSON("php/getpeople.php", function(data){ //getpeople.php generates the JSON var people = data; alert("people.length: " + people.length); if (people.length > 0) { alert("people[0].id: " + people[0].id); } });
Следующие не должны работать, т. Е. people
будут undefined
, потому что $ .getJSON является асинхронным методом, и этот код пытается получить доступ к people
до завершения операции AJAX.
var people; $.getJSON("php/getpeople.php", function(data){ //getpeople.php generates the JSON people = data; }); alert("people.length: " + people.length); if (people.length > 0) { alert("people[0].id: " + people[0].id); }