Javascript 从JSON数据创建HTML项目符号列表时出现问题

Javascript 从JSON数据创建HTML项目符号列表时出现问题,javascript,html,json,recursion,Javascript,Html,Json,Recursion,我有一些JSON,我想把它们交给一个项目符号列表。每个级别都有一个名称字段和一个子字段(最低级别除外)。我尝试过使用递归来实现它,但遇到了一个问题。除最后一级外,仅显示第一个子级。我有一种感觉,我的一些递归调用可能没有正确返回。以下是我目前掌握的代码: function load_menu(){ json_text=ajax_get("example.json"); json_tree=JSON.parse(json_text); write_menu(json_tree

我有一些JSON,我想把它们交给一个项目符号列表。每个级别都有一个名称字段和一个子字段(最低级别除外)。我尝试过使用递归来实现它,但遇到了一个问题。除最后一级外,仅显示第一个子级。我有一种感觉,我的一些递归调用可能没有正确返回。以下是我目前掌握的代码:

function load_menu(){
    json_text=ajax_get("example.json");
    json_tree=JSON.parse(json_text);
    write_menu(json_tree.children,document.getElementById("level1"));
}
function write_menu(json,element){
    for(i=0;i<json.length;i++){
        var listitem=document.createElement("li");
        element.appendChild(listitem);
        var listitemtext=document.createElement("span");
        listitem.appendChild(listitemtext);
        listitemtext.innerText=json[i].name;
        if(json[i].children){
            listitemtext.setAttribute("onclick","toggle(this);");
            var sublist=document.createElement("ul");
            listitem.appendChild(sublist);
            write_menu(json[i].children,sublist);
        };
    };
}
应该是这样的:

Level 1,1
    Level 2,1
        Level 3,1
        Level 3,2
Level 1,1
    Level 2,1
        Level 3,1
        Level 3,2
    Level 2,2
Level 1,2
    Level 2,3
我已经检查了我的JSON,看起来还可以,所以我想递归肯定有问题。有人能帮我吗?

如果你为(i…编写
,JS解释器将创建一个新变量
i
,如果不存在,或者重用一个现有变量(如果存在)。这就是问题所在,因为在每个递归级别中都需要新的循环变量


因此,解决方案是通过为每个级别编写
来强制创建变量(var i.
相反。

json.length'返回什么?根据示例输出,它看起来将返回而不是您期望的2。编辑:在进一步调查中,
i
设置为
0
将小于
json。length
始终如此,它将只返回一次,不是吗?您可以尝试为(变量i…
而不是(i..。当你像这样递归时,函数可能会重用相同的
i
。给我们你的示例JSON输入。Lister,我被设置为0,所以即使它继续
i
,它也会被重置
i=0
。@Interstarr\u Coder这正是问题所在,内部递归循环正在干扰外部递归的计数器。@InterseLalar_Coder是的,在“级别3,2”之后,我是2,即使它仍然应该是0(因为你还没有完成级别1)