Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jstree树结构中动态创建节点_Javascript_Jstree - Fatal编程技术网

Javascript 在jstree树结构中动态创建节点

Javascript 在jstree树结构中动态创建节点,javascript,jstree,Javascript,Jstree,我必须从数据库中检索菜单项列表,并将其显示在树结构中我想使用菜单名作为节点名,使用菜单id作为节点id。 我使用的方法是使用ajax调用检索数据并将其放入列表中,然后将其显示为树。但我认为根据数据动态创建节点更有效 function createNodeList(){ $('#menuCPanel #contentData #tree').jstree({ "json_data" : { /*"


我必须从数据库中检索菜单项列表,并将其显示在树结构中
我想使用菜单名作为节点名,使用菜单id作为节点id。 我使用的方法是使用ajax调用检索数据并将其放入列表中,然后将其显示为树。但我认为根据数据动态创建节点更有效

   function createNodeList(){
        $('#menuCPanel #contentData #tree').jstree({            
            "json_data" : {
                /*"data" : [{
                    "data" : {title : "menuName"},
                    "attr" : {id : "menuId"},
                    "state" : "closed"
                    }
                   ],*/
                 "ajax" :{
                    "type" : "POST",
                    "url" : "?m=admin?action=getNodeList",
                    "dataType" : "json",
                    "data" : function(result){
                        return {                            
                            id : result.attr ? result.attr("id") : result['menuId'],
                            title : result.attr ? result.attr("title") : result['menuName']
                        };
                    },  

                },
            },
            "callback" : {

            },

            "themes" : {
                "theme" : "classic",
                "dots" : true,
                "icons" : true
            },
            "plugins" : ["json_data", "themes"]

        }).bind("select_node.jstree", function (e, data) { alert(jQuery.data(data.rslt.obj[0], "jstree").id) });

    }


    }
这是我的json数据的结构

"data":[{"menuId":"1","menuName":"Top Menu"},{"menuId":"2","menuName":"Main Menu"},{"menuId":"3","menuName":"Bottom Menu"},{"menuId":"4","menuName":"Main Menu"}]}
我想知道上面的结果有什么问题,以及如何在ajax.success()中动态创建节点
我看了一些示例,但它们都使用了jstree.cretate(),我无法在jstree.json_data.ajax.success()中调用它
提前感谢:)

这是一个包含json数据的标准jstree,它还绑定了
select\u node
以在选择节点时执行操作。节点的ID不能是纯数字或包含jquery特殊选择器字符。数字标识必须首先具有标准字符。例如,1应该是N1,2应该是N2

$('#MyTreeDiv').jstree({
        "json_data": {
            "ajax": {
                "type": "POST",
                "url": "/MyServerPage.aspx?Action=GetNodes",
                "data": function (n) { return { id: n.attr ? n.attr("id") : 0} },
            }
        },
        "themes": {
            "theme": "default",
            "url": "/Content/Styles/JSTree.css",
            "dots": false
        },
        "plugins": ["themes", "json_data", "ui", "crrm"]
    }).bind("select_node.jstree", function (e, data) {
        var selectedObj = data.rslt.obj;
        alert(selectedObj.attr("id"));
});

从服务器返回的json必须采用jstree文档中定义的正确格式,并且不得包含多个特殊字符,除非这些字符被转义或json是使用序列化创建的。

为什么要在success函数中再次构建树?调用服务器,返回json字符串并为您构建树。如果您想让标记转到某个地方,只需绑定select_node.jstreeoh ok。。。。我对这件事有点困惑。你能更具体地解释一下如何显示数据{action:'getNodeList'}检索到的节点吗?m=admin应该以文档中描述的格式返回json字符串。一旦从?m=admin传回json,您不需要创建成功或错误函数,也不需要更改json。从服务器接收到的ajax数据由树本身设置为正确的格式。好的,非常感谢。我将尝试此方法。我对其进行了更改,但随后出现错误“无法初始化[无法初始化模块(admin?action=getNodeList)]”,页面上有一个加载符号。这是我对“ajax”所做的更改:{“类型”:“POST”,“url”:“?m=admin?action=getNodeList”,“dataType”:“json”,“data”:函数(result){return{id:result.attr?result.attr(“id”):result['menuId'],title:result.attr?result.attr(“title”):result['menuName']},好的,谢谢Byron。你能解释一下函数(n){return{id:n:n.attr?n.attr(“id”):0}”,}它检查是否选择了节点(n),如果是,则将其id(n.attr(“id”)传递给服务器,否则将0传递给服务器。它检查是否选择了节点(n),如果是,则传递其id(n.attr(“id”)到服务器,否则将0传递到服务器。好的,非常感谢Cobb。感谢您的帮助,它部分工作。只需处理我的json数据格式