jstree - 为什么不在jstree中加载ajax请求返回的数据

标签 jstree

我在 jstree 中发出 ajax 请求,我在 success 方法中看到返回的数据并返回此数据..但树仍然是空的。 图片:enter image description here

Jstree:

$('#tree_2').jstree({
            'plugins': ["checkbox" ,"ui"],
            'core' : {
                'data' : {
                    "url" : "../../Controller/ActiveDirectoryController.php5?"+datas,
                    "data" : function (node) {
                        debugger
                        return { "id" : node.id };
                    },
                    "success": function(result_){
                        result = JSON.parse(result_);
                        debugger
                        return [result.Objects];
                    }
                }
            }
        });

php:

 if(in_array("user",$aDobjects[$i]["objectclass"]))
                    {
                        $result[] = array("id"=>$i+1,"text"=>$aDobjects[$i]["name"][0],"children"=>false,"parent"=>"-2", "distinguishedName"=>$aDobjects[$i]["distinguishedname"][0]);
                    }
                    else
                    {
                        $result[] = array("id"=>$i+1,"text"=>$aDobjects[$i]["name"][0],"children"=>true,"parent"=>"-2", "distinguishedName"=>$aDobjects[$i]["distinguishedname"][0]);
                    }
                }

最佳答案

我使用 jstree 事件,在其中绑定(bind) post 函数还检查数据(停止相同节点 post)并通过响应刷新树,这是我如何解决我的问题的:

var slctedText ="";
$('#tree_2').jstree({
    'plugins': ["types","json_data" ,"ui"],
    'core': {
        "themes" : {
            "responsive": false,
            "icons":false
        },
        'data': [{}]
    },
    "types" : {
        "default" : {
            "icon" : "fa fa-folder icon-state-warning icon-lg"
        },
        "file" : {
            "icon" : "fa fa-file icon-state-warning icon-lg"
        }
    }
}).bind('before_open.jstree', function (e, data) {
    e.stopPropagation()
    setUpButtons();
    if( data.node.text.indexOf("DC=")>-1)//!passOpen ||
        return;
    if(data.node.text == slctedText)
        return;
    debugger
    keyValuePair = []
    slctedText = data.node.text;
    var objParam = data.node.original.subtext;//prepareParam(slctedText, data.node.parents);
    var params = {
        action: "getSubAdObjects",
        objectParam: objParam,
        serverIP: serverip,
        port: port,
        domain: domain,
        username: username,
        password: password
    }
    $.ajax({
        url: "../../Controller/ActiveDirectoryController.php5",
        type: "POST",
        async:false,
        dataType: "json",
        data: params,
        success: function (result) {
            passOpen = false;
            if(result.Objects.length>0)
            {
                treeData_ = prepareObjectsforTree(result.Objects);
                resfreshJSTree(treeData_);
                debugger
            }
            $("#mdlObjects").modal("show");
            $("#divfailed").hide();
            event.theme ='lime';
            event.heading ='<i class=\'fa fa-check\'></i> Process Completed';
            event.message ='Active Directory objects retrieved successfully.';
            ntf(event);

        },
        error: function (a, b, c) {

        }
    })
})

此服务器函数从服务器返回响应数据:

public function parseADobjectsForTree($aDobjects){
        try
        {
            $result = array();
            $singleObject = array();
            unset($aDobjects["count"]);
            for($i=0; $i < count($aDobjects); $i++)
            {
                if(array_key_exists("name", $aDobjects[$i]))
                {
                    if(in_array("user",$aDobjects[$i]["objectclass"]))
                    {
                        $result[] = array("id"=>$i+1, "text"=>$aDobjects[$i]["name"][0],"subtext"=>$aDobjects[$i]["distinguishedname"][0] );//"li_attr"=>"jstree-leaf"
                    }
                    else
                    {
                        $result[] = array("id"=>$i+1, "text"=>$aDobjects[$i]["name"][0], "subtext"=>$aDobjects[$i]["distinguishedname"][0],"children"=> array());//"li_attr"=>"jstree-closed",
                    }

                }
            }

关于jstree - 为什么不在jstree中加载ajax请求返回的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632587/

相关文章:

jquery - 如何使用html源为jstree设置自定义图标

javascript - jstree select_limit 不工作。我想将选择限制设置为仅选择 3 个节点

jstree移动,拖放

javascript - 是否可以通过搜索插件正确使用导航键(热键插件)("show_only_matches": true)

angularjs - 在 Angular 指令中包装 JSTree

JsTree 上下文菜单回调函数未触发

javascript - 更改 jstree 单击时的默认行为

jquery - jstree获取所有子节点

javascript - JS树节点被选中时如何获取其祖先?

javascript - 即使加载后,jsTree 也不会 open_all