Ответ 1
Это потому, что ваш базовый объект также является массивом.
console.log(dataJS[0].comments[0]);
Я подозреваю, что это сработает
Здравствуйте, у меня есть следующий объект JSON:
[
{
"comments":[
{
"created_at":"2011-02-09T14:42:42-08:00",
"thumb":"xxxxxxx",
"level":1,"id":214,
"user_id":41,
"parent_id":213,
"content":"<p>xxxxxx</p>",
"full_name":"xx K"
},
{
"created_at":"2011-02-09T14:41:23-08:00",
"thumb":"xxxxxxxxxxxxx",
"level":0,
"id":213,
"user_id":19,
"parent_id":null,
"content":"<p>this is another test</p>",
"full_name":"asd asd asd asd asd"
}
],
"eee1":"asdadsdas",
"eee2":"bbbbb"
}
]
Это происходит от запроса $.ajax
, в успехе у меня есть....
success: function (dataJS) {
console.log(dataJS);
console.log(dataJS[eee1]);
console.log(dataJS.comments);
}
Проблема в том, что я не могу получить доступ к элементам в объекте JSON, хотя dataJS действительно отображается в консоли. Идеи?
Спасибо
Это потому, что ваш базовый объект также является массивом.
console.log(dataJS[0].comments[0]);
Я подозреваю, что это сработает
JSON, на который вы возвращаетесь, на самом деле является массивом, поэтому...
dataJS[0].comments[0].created_at
будет 2011-02-09T14:42:42-08:00
и т.д.
Оба dataJS
и comments
являются массивами и нуждаются в индексах для доступа к соответствующим элементам.
Возвращаемый объект сам является массивом, поэтому, чтобы перейти к первому комментарию (в качестве примера), вы получите доступ к нему:
dataJS[0].comments[0]
console.log(dataJS);
console.log(dataJS[0].eee1);
console.log(dataJS[0].comments[0]);
Сделайте что-то вроде этого: -
var dataJS = [{"comments":[{"created_at":"2011-02-09T14:42:42-08:00","thumb":"xxxxxxx","level":1,"id":214,"user_id":41,"parent_id":213,"content":"<p>xxxxxx</p>","full_name":"xx K"},{"created_at":"2011-02-09T14:41:23-08:00","thumb":"xxxxxxxxxxxxx","level":0,"id":213,"user_id":19,"parent_id":null,"content":"<p>this is another test</p>","full_name":"asd asd asd asd asd"}],"eee1":"asdadsdas","eee2":"bbbbb"}];
var created_at = dataJS[0].comments[0].created_at;
Да, как заявили другие, JSON на самом деле является массивом (одного объекта). Поэтому вам нужно будет ссылаться на индекс.
Довольно интересно (для меня), ваша строка результатов успешно проверяется как JSON. Я предполагал до сих пор, что для того, чтобы быть действительным JSON, он должен был быть объектом (т.е. {}).
Вы должны указать dataType в запросе ajax как "JSON". Сделайте пользователя таким, как показано ниже.
$.ajax({
url: $('#frmAddCourse').attr('action'),
type: 'POST',
data: $('#frmAddCourse').serialize(),
dataType: 'JSON',
success: function (data){
Materialize.toast(data['state'],2000);
},
error:function(){
Materialize.toast(errorMessage,2000);
}
});
//Вы можете использовать AJAX, например, если вы берете JSON из API->
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.status === 200 && xhr.readyState === 4) {
let response = JSON.parse(xhr.responseText);
//here i loop through the Object
for (let key in response) {
// Comments it an array so you can loop through it with a loop
for (let i = 0; i < response[key].comments.length; i++) {
// in order to display it in the DOM please provide after the [i]
// the value that you want to display example -> [i].created_at
console.log(response[key].comments[i]);
}
}
}
};
xhr.open("GET", "Put the name of the file/ the url of the site that the json appear in", true);
xhr.send();
JSON должен интерпретироваться с помощью функции eval
(после очевидной дезинфекции см. соображения безопасности eval). Вы уверены, что ваши рамки делают это для вас?