Неопределенная ошибка переменной при разборе json - PullRequest
0 голосов
/ 03 июня 2010

Я пытаюсь разобрать json, взятый из здесь . По сути, я перебираю элементы, сортирую их, затем отображаю их. Но я получаю сообщение об ошибке data.data.children[i] is undefined.

Хотя я не могу понять, почему он это делает?

var json = 'http://www.reddit.com/reddits/mine/.json';

GM_xmlhttpRequest({
    method: "GET",
    url:    json,
    onload: reddits
});

function reddits(response){
    var txt = response.responseText;
    var data;
    var suggested = document.getElementById('suggested-reddits');
    if(window.JSON && JSON.parse){
        data = JSON.parse(txt);
    }
    else{
        data = eval("("+txt+")");
    }

    suggested.innerHTML += '<span>reddits you\'re subscribed to </span> <ul id="rsub"></ul>';
    GM_addStyle('#rsub{width: 500px;}');
    var reddits = new Array();  
    var rsub = document.getElementById('rsub');

    for(i = 0; i <= data.data.children.length; i++){
        var r = data.data.children[i].data.display_name;
        reddits.push(r);
    }
    sort(reddits);
    for(i = 0; i <= reddits.length; i++){       
        rsub.innerHTML += '<li><a href="#" onclick="set_sr_name(this); return false">' + reddits[i] + '</a></li>';
    }
}

1 Ответ

2 голосов
/ 03 июня 2010
for(i = 0; i <= data.data.children.length; i++){
    var r = data.data.children[i].data.display_name;
    reddits.push(r);
}

Ясная проблема в заявлении for. Измените i <= data.data.children.length на i < data.data.children.length. Обратите внимание на изменение неравенства.

Поскольку массивы в Javascript индексируются 0, элемент в i = data.data.children.length не существует.

Вероятно, вы должны сделать то же самое для цикла reddits.length.

...