我可以使用预加载JSON数据的jsTree并使用Ajax

时间:2018-01-22 17:18:42

标签: json ajax jstree

我让jsTree使用JSON数据:JSON数据代表服务器的文件系统,用户可以从树中选择一个文件夹,然后将其添加到文件夹输入字段中。我不希望在没有提供文件系统的前三个级别的情况下加载页面。但是,我不解析整个文件系统,因为这需要太长时间。

我可以预先使用JSON数据填充jsTree,并在用户打开树下未预先填充的节点时使用Ajax,或者我是否还必须使用Ajax进行初始加载?

下面我展示了我当前的代码(没有任何Ajax),但为了简洁起见,只将数据检索到一个级别:它从服务器返回C:\E:\个文件系统。这很有效,但是当用户试图在层次结构中进一步打开一个节点时,我不清楚如何将Ajax引入此中。

    <label for="folder">Selected Folder</label>
    <input type="text" name="folder" id="folder">
    <br>
    <script type="text/javascript">
    function createJSTree(jsondata) 
    {            
      $('#jstree').jstree(
        {
          "plugins" : ["themes","html_data","ui","cookie"],
          'core': 
          {
              'data': jsondata
          }
        }
      )
      .bind("select_node.jstree",   
                function (e, data) 
                {
                    var objNode = data.instance.get_node(data.selected);
                    document.getElementById('folder').value=objNode.id;
                }
        )
      ;
    }

    $(function() { var jsondata ={"text":"pclaptop","children":[{"id":"C:\\","text":"C:\\","children":[]},{"id":"E:\\","text":"E:\\","children":[]}]}; createJSTree(jsondata); })
    </script>

1 个答案:

答案 0 :(得分:0)

在进入代码的ajax片段之前,我必须设置check_callback parameter in jsTree才能编辑jsTree。接下来,我调用`$(&#39; #jstree&#39;)。jstree()。​​create_node(&#39;#&#39;,parsedData,&#34; last&#34;);在jQuery的ajax调用的成功方法中,这就是诀窍。我的解决方案如下:

的index.html

<label for="folder">Selected Folder</label>
    <input type="text" name="folder" id="folder">
    <br>
    <button id="create-node-button">
       Create Node
    </button>
<div id="jstree"></div>
<script type="text/javascript">
    function createJSTree(jsondata) {
        $('#jstree').jstree({
                "plugins": ["themes", "html_data", "ui", "cookie"],
                'core': {
                    'check_callback': true,
                    'data': jsondata
                }
            })
            .bind("select_node.jstree",
                function(e, data) {
                    var objNode = data.instance.get_node(data.selected);
                    document.getElementById('folder').value = objNode.id;
                }
            );
    }

    $(function() {
        var jsondata = [{
                "id": "pclaptop",
                "parent": "#",
                "text": "pclaptop"
            },
            {
                "id": "C:\\",
                "parent": "pclaptop",
                "text": "C:\\"
            },
            {
                "id": "E:\\",
                "parent": "pclaptop",
                "text": "E:\\"
            },
            {
                "id": "F:\\",
                "parent": "pclaptop",
                "text": "F:\\"
            }
        ];
        createJSTree(jsondata);

        $("#create-node-button").on("click", function() {
            $.ajax({
                url: "./data.json",
                success: function(data){
                    var parsedData = JSON.parse(data);
                    $('#jstree').jstree().create_node('#', parsedData, "last");
                }
            });
        });
    });
</script>

data.json

{ "id" : "ajson5", "text" : "newly added" }

最后,here is a fiddle。我不确定如何在jsfiddle中正确设置ajax调用,所以我在本地做了。