上一篇
可通过调用
reAsyncChildNodes方法异步刷新节点数据,或销毁原树后重新初始化ztree实例,需确保初始化配置开启异步加载(async.enable=true)并正确配置数据源URL。
核心原理
ztree本身不直接连接数据库,需通过Ajax请求后端接口获取最新数据,再调用ztree的API刷新视图,关键方法:
$.fn.zTree.init():重新初始化整棵树reAsyncChildNodes():异步刷新节点数据(推荐局部更新)destroy():销毁旧树(完全重建时使用)
完整重载流程(推荐)
场景:数据库数据变化后,需要完全刷新整棵树
// 1. 销毁旧树(避免内存泄漏)
var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
if (treeObj) {
treeObj.destroy();
}
// 2. 重新初始化ztree
function loadTree() {
$.ajax({
url: "/api/getNewTreeData", // 替换为你的数据接口
type: "GET",
dataType: "json",
success: function(zNodes) {
var setting = {
data: { simpleData: { enable: true } },
async: { enable: true, url: "/api/getNewTreeData" }
};
// 初始化新树
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
},
error: function() { alert("数据加载失败"); }
});
}
// 3. 调用函数刷新
loadTree();
局部刷新(高效方案)
场景:仅更新当前父节点下的子节点(如展开节点时)
// 设置异步加载模式
var setting = {
async: {
enable: true,
url: "/api/getChildrenData", // 子节点数据接口
autoParam: ["id=parentId"] // 自动传递父节点ID参数
}
};
// 初始化树
var treeObj = $.fn.zTree.init($("#treeDemo"), setting, initialData);
// 刷新指定节点(例如点击按钮时)
function reloadNode(node) {
treeObj.reAsyncChildNodes(node, "refresh"); // refresh模式清空子节点重新加载
}
// 刷新根节点示例:
var rootNode = treeObj.getNodes()[0];
reloadNode(rootNode); // 只重载第一层节点
关键注意事项
-
后端接口规范:

- 返回标准JSON数组格式:
[{ id:1, pId:0, name:"节点" }, ...] - 根节点的
pId属性必须为0
- 返回标准JSON数组格式:
-
性能优化:
- 局部刷新用
reAsyncChildNodes()替代整树重建 - 分页加载大数据量时,设置
setting.async.pageSize
- 局部刷新用
-
错误处理:

treeObj.setting.callback.onAsyncError = function(event, treeId, msg) { console.error("加载失败: " + msg); }; -
避免内存泄漏:

- 完全重建时务必先调用
treeObj.destroy() - 移除旧树DOM元素:
$("#treeDemo").empty()
- 完全重建时务必先调用
常见问题解决
- 节点未更新:检查后端是否返回最新数据,用浏览器开发者工具查看网络请求
- 重复加载:确保未多次初始化ztree(用
$.fn.zTree.getZTreeObj()判断是否存在实例) - 数据格式错误:使用
console.log(zNodes)打印返回数据,验证是否符合ztree格式
最佳实践建议
- 增量更新:频繁更新的场景,后端只返回变化节点数据,用
addNodes()/updateNode()局部修改 - 防抖处理:高频刷新时添加延迟机制
let reloadTimer; function debouncedReload() { clearTimeout(reloadTimer); reloadTimer = setTimeout(() => loadTree(), 300); // 300ms防抖 }
引用说明:本文方法基于ztree官方文档v3.5.24实现,核心API参考自zTree的
async模块和节点管理方法,实际开发请根据业务需求调整参数,并确保后端接口与前端数据结构一致。
