jsTree子节点未触发ajax调用

时间:2015-03-22 16:38:18

标签: javascript jquery ajax jstree

我有以下HTML

<div id='jstree_demo'></div>

我调用了jsTree来初始化树

function set_tree() {
        $('#jstree_demo').jstree({
            "core": {
               "animation": 0,
               "check_callback": true,
               "themes": { "stripes": true },
               "data": {
                   "type": "POST",
                   "contentType": "application/json; charset=utf-8",
                   "url": function (node) { 
                    return node.id === '#' ? 'Data.aspx/get_node_root' :
                                             'Data.aspx/get_node_children';
                   },
                   "data": function (node) { 
                     return "{'id': '" + node.id + "'}"; 
                   }
             }
          },
            "plugins": [ "themes", "json_data", "ui"]
        });
 }

一旦我调用get_node_root函数,就会触发对set_tree()的调用。

来自服务器的返回数据是:

[{"id":1,"text":"Grand Parent", "state":"closed"}]

树视图很好地更新。但问题是文件夹旁边没有箭头,似乎Grand Parent不可点击。

我修改了服务器函数get_node_root以使其返回:

[{"id":1,"text":"Grand Parent", "state":"closed",
      "children":[
             {"id":20,"text":"Son 1"},
             {"id":30,"text":"Son 2"}
                 ]
}]

然后我再次加载页面。这一次,Grand Parent出现了Son 1Son 2预加载。

这一次,Grand Parent有一个我可以使用的折叠箭头。但儿子们没有。当我单击SonParent时,不再对服务器进行调用。我正在使用Chrome开发者工具查看是否存在可能正在停止呼叫的服务器错误或javascript语法错误。什么也没发生。

我甚至试过这个:

           ...
           "data": {
               "type": "POST",
               "contentType": "application/json; charset=utf-8",
               "url": function (node) { 
                alert('node id is: ' + node.id); // The alert is: #
                return node.id === '#' ? 'Data.aspx/get_node_root' :
                                         'Data.aspx/get_node_children';
               },
            ...

警报始终显示标识为#

的第一个节点

即使我点击或展开任何儿子或父母,警报也不会再次出现。

我在服务器代码后面放了一个断点,该函数返回父项和子项。除了初始调用之外,不再从服务器执行代码...

我花了5个小时试图弄清楚什么是错的。我找到了相关的答案,但没有一个答案有效。

我做错了什么?

0 个答案:

没有答案