2010-06-03 105 views
0

我试图解析从here抓取的json。基本上我所做的是迭代这些项目,对它们进行排序,然后显示它们。但是我收到一个错误,说data.data.children[i] is undefined解析json时未定义的变量错误

我不知道为什么它这样做,但?

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>'; 
    } 
} 

回答

2
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循环做同样的事情。