【问题标题】:Can I use jsTree preloaded with JSON data and also use Ajax我可以使用预加载 JSON 数据的 jsTree 并使用 Ajax
【发布时间】:2018-07-01 09:37:53
【问题描述】:

我有 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>

【问题讨论】:

  • 你用的是什么版本的jsTree?
  • @JonathanChaplin 我认为的最新版本,3.3.5

标签: json ajax jstree


【解决方案1】:

在我进入 ajax 代码之前,我必须设置 check_callback parameter in jsTree 它可以编辑 jsTree。接下来,我调用 `$('#jstree').jstree().create_node('#', parsedData, "last");在 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>

数据.json

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

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

【讨论】:

  • 感谢您到目前为止的帮助,但我希望它在您单击节点而不是单独按钮时打开节点的内容,并且从用户的角度来看它不是在创建数据只需根据需要从服务器检索数据,而不是一次尝试全部检索。查看另一个执行此操作的应用程序,我可能误导了您,似乎每个孩子的左侧应该有一个白色的小箭头,点击它打开它应该调用 ajax 调用。
  • 明白了;该按钮将是一个简单的修复。但是,我不确定您对服务器功能的期望,这就是为什么该部分在 json 文件中被硬编码的原因。你能提供更多细节吗?
  • 服务器功能并不是真正的问题,它应该为已单击的树节点提供正确的 json,但我可以做到。我的问题是正确配置了 jstree 代码,以便它调用服务器(或模型)并使用返回的数据。
  • 好的,我删除了按钮并更新了我的小提琴。 jsfiddle.net/74xmw78b/15。我稍后会更新我的答案。
  • 感谢您的帮助,这很有帮助,但我后来发现虽然 jstree 网站没有那么有帮助,但 jstree github repo github.com/vakata/… 中的 README 对延迟加载 ajax 有很好的解释,所以我在此基础上创建了一个更简单的解决方案,并会在适当的时候发布答案,但会奖励你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多