Javascript php jstree如何仅在单击父级展开时从数据库加载子级

Javascript php jstree如何仅在单击父级展开时从数据库加载子级,javascript,php,jquery,jstree,Javascript,Php,Jquery,Jstree,我正在创建一个jstree来对数据库的所有数据进行分类,并将其显示在ajax树中。我希望我可以创建一个jstree,当我单击父级进行扩展时,子级只能从数据库加载jstree,以减少开始加载页面的时间。下面是我用来创建jstree的代码。如何修改代码,以便在单击要展开的父节点时创建只加载子节点的jstree 这是我用来显示jstree的代码 $('#ajax').jstree({ 'core' : { 'data' : { "url" : "<

我正在创建一个jstree来对数据库的所有数据进行分类,并将其显示在ajax树中。我希望我可以创建一个jstree,当我单击父级进行扩展时,子级只能从数据库加载jstree,以减少开始加载页面的时间。下面是我用来创建jstree的代码。如何修改代码,以便在单击要展开的父节点时创建只加载子节点的jstree

这是我用来显示jstree的代码

$('#ajax').jstree({
    'core' : {
        'data' : {
            "url" : "<?php echo $weburls; ?>loadtree.php",
            "dataType" : "json" 
        }
    }
});    
//insert parents into array
$resultProj = getResult("SELECT DISTINCT parents FROM table WHERE parents IS NOT NULL ");
for($i2=0;$i2<sizeOf($resultProj);$i2++){
    $dresult[$i2]['id']= $i2+1;
    $dresult[$i2]['name']=$resultProj[$i2]['parents'];
    $dresult[$i2]['text']=$resultProj[$i2]['parents'];
    $dresult[$i2]['parent_id']='0';
    $ddresult[$i2]['id']= $i2+1;
    $ddresult[$i2]['name']=$resultProj[$i2]['parents'];
}
$i3=sizeOf($dresult);
$i4=sizeOf($dresult);

//insert childrens into array
foreach($ddresult as $dresult2){
    $resultcust = getResult("SELECT no, name FROM table WHERE parents='" . $dresult2['name'] . "'");
    $i5=0;
    for($i3;$i3<(sizeOf($resultcust)+$i4);$i3++){
        $dresult[$i3]['id']=$resultcust[$i5]['no'];
        $dresult[$i3]['name']=$resultcust[$i5]['name'];
        $dresult[$i3]['text']=$resultcust[$i5]['name'];
        $dresult[$i3]['parent_id']=$dresult2['id'];
        $i5++;
    }
    $i3=sizeOf($dresult);
    $i4=sizeOf($dresult);
}

$itemsByReference = array();
// Build array of item references:
foreach($dresult as $key => &$item) {
   $itemsByReference[$item['id']] = &$item;
   // Children array:
   $itemsByReference[$item['id']]['children'] = array();
   // Empty data class (so that json_encode adds "data: {}" ) 
   $itemsByReference[$item['id']]['dresult'] = new StdClass();
}

// Set items as children of the relevant parent item.
foreach($dresult as $key => &$item)
if($item['parent_id'] && isset($itemsByReference[$item['parent_id']]))
  $itemsByReference [$item['parent_id']]['children'][] = &$item;

// Remove items that were added to parents elsewhere:
foreach($dresult as $key => &$item) {
if($item['parent_id'] && isset($itemsByReference[$item['parent_id']]))
  unset($dresult[$key]);
}
echo json_encode( $dresult );
这是我用来将数据加载到数组并传递到jstree的代码

$('#ajax').jstree({
    'core' : {
        'data' : {
            "url" : "<?php echo $weburls; ?>loadtree.php",
            "dataType" : "json" 
        }
    }
});    
//insert parents into array
$resultProj = getResult("SELECT DISTINCT parents FROM table WHERE parents IS NOT NULL ");
for($i2=0;$i2<sizeOf($resultProj);$i2++){
    $dresult[$i2]['id']= $i2+1;
    $dresult[$i2]['name']=$resultProj[$i2]['parents'];
    $dresult[$i2]['text']=$resultProj[$i2]['parents'];
    $dresult[$i2]['parent_id']='0';
    $ddresult[$i2]['id']= $i2+1;
    $ddresult[$i2]['name']=$resultProj[$i2]['parents'];
}
$i3=sizeOf($dresult);
$i4=sizeOf($dresult);

//insert childrens into array
foreach($ddresult as $dresult2){
    $resultcust = getResult("SELECT no, name FROM table WHERE parents='" . $dresult2['name'] . "'");
    $i5=0;
    for($i3;$i3<(sizeOf($resultcust)+$i4);$i3++){
        $dresult[$i3]['id']=$resultcust[$i5]['no'];
        $dresult[$i3]['name']=$resultcust[$i5]['name'];
        $dresult[$i3]['text']=$resultcust[$i5]['name'];
        $dresult[$i3]['parent_id']=$dresult2['id'];
        $i5++;
    }
    $i3=sizeOf($dresult);
    $i4=sizeOf($dresult);
}

$itemsByReference = array();
// Build array of item references:
foreach($dresult as $key => &$item) {
   $itemsByReference[$item['id']] = &$item;
   // Children array:
   $itemsByReference[$item['id']]['children'] = array();
   // Empty data class (so that json_encode adds "data: {}" ) 
   $itemsByReference[$item['id']]['dresult'] = new StdClass();
}

// Set items as children of the relevant parent item.
foreach($dresult as $key => &$item)
if($item['parent_id'] && isset($itemsByReference[$item['parent_id']]))
  $itemsByReference [$item['parent_id']]['children'][] = &$item;

// Remove items that were added to parents elsewhere:
foreach($dresult as $key => &$item) {
if($item['parent_id'] && isset($itemsByReference[$item['parent_id']]))
  unset($dresult[$key]);
}
echo json_encode( $dresult );

为特定父节点延迟加载节点的方法是通过RESTAPI仅获取子节点。对于每个请求,您必须在AJAX调用中传递一个节点id。因此,您需要在jstree配置中添加一个额外的数据回调,它将节点id附加到您的请求中

$('#ajax').jstree({
    'core' : {
        'data' : {
            "url" : "<?php echo $weburls; ?>loadtree.php",
            "data" : function (node) {
                if(node.id === '#'){ return; }
                return { 'id': node.id };
            }
        }
    }
}); 
因此,生成的url可能有点像这样

获取根节点的子节点-myservice.com/loadtree.php

获取Child1的子项-myservice.com/loadtree.php?id=Child1


注意:为节点生成的id在整个树结构中是唯一的,这一点很重要。

为特定父节点延迟加载节点的方法是通过REST API仅获取子节点。对于每个请求,您必须在AJAX调用中传递一个节点id。因此,您需要在jstree配置中添加一个额外的数据回调,它将节点id附加到您的请求中

$('#ajax').jstree({
    'core' : {
        'data' : {
            "url" : "<?php echo $weburls; ?>loadtree.php",
            "data" : function (node) {
                if(node.id === '#'){ return; }
                return { 'id': node.id };
            }
        }
    }
}); 
因此,生成的url可能有点像这样

获取根节点的子节点-myservice.com/loadtree.php

获取Child1的子项-myservice.com/loadtree.php?id=Child1


注意:为节点生成的id在整个树结构中都是唯一的,这一点很重要。

看起来您正在使用jstree:try:可能重复的看起来您正在使用jstree:try:可能重复的感谢,您提供的答案在没有ifnode.id==={return;}的情况下对我很有效。谢谢,您提供的答案在没有ifnode.id=={return;}的情况下对我很有效。