Javascript JSON проблема - PullRequest
       5

Javascript JSON проблема

1 голос
/ 11 августа 2011

Сервер возвращает клиенту этот JSON:

{
    "comments": [
        {
            "id": 99,
            "entryId": 19,
            "author": "Вася",
            "body": "Комент Васи",
            "date": "20.10.2022"
        },
        {
            "id": 100,
            "entryId": 19,
            "author": "n54",
            "body": "w754",
            "date": "21.10.2023"
        }
    ],
    "admin": false
}

Я пытаюсь показать это:

if (xmlhttp.readyState==4 && xmlhttp.status==200){
    var json = eval("("+xmlhttp.responseText+")");
    for(var comment in json.comments){
        alert(comment["author"]);
    }
}

Как и ожидалось, цикл работает 2 раза, но это предупреждение показывает только«неопределенный».Но если я попытаюсь выполнить оповещение (json.admin);это покажет ложь, как и планировалось.Что я делаю не так?

Ответы [ 4 ]

1 голос
/ 11 августа 2011

Вам нужно сделать

for(var comment in json.comments){
    alert(json.comments[comment]['author']);
}

комментарий это просто индекс массива т.е. 0, 1

0 голосов
/ 12 августа 2011

Если вам нужно перебирать содержимое массива, вы должны перебирать индексы массива, а не перебирать свойства массива,

Так что используйте следующий фрагмент кода для итерации по индексам массива, что нужно сделать,

for(var i = 0; i < json.comments.length; i++){
    alert(json.comments[i]["author"]);
}

Итерация по свойствам массива, подобным следующему фрагменту кода, является неправильным способом, потому что одно из свойств массива содержит функцию 'remove'.

for(var i in json.comments){
    alert(json.comments[i]["author"]);
}

В приведенном выше коде i будет принимать значения 0, 1, 2, ..., удалить функцию

0 голосов
/ 11 августа 2011

В вашем JSON комментарии - это массив. Это лучше зациклено с пронумерованным индексом for.

if (xmlhttp.readyState==4 && xmlhttp.status==200){
    var json = JSON.parse(xmlhttp.responseText); //See my comment on OP
    for(var i = 0; i < json.comments.length; i++){
        alert(json.comments[i]["author"]);
    }
}
0 голосов
/ 11 августа 2011

Попробуйте это

if (xmlhttp.readyState==4 && xmlhttp.status==200){
    var json = eval("("+xmlhttp.responseText+")");
    for(var i=0;i<json.comments.length;i++){
        alert(comment[i].author);
    }
}
...