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