// 根节点ID和名称 var rootId = "N000"; var rootName = "菜单"; // 获取指定节点下的所有子节点 function getChildren(nodes, id) { var result = []; for (var i = 0; i < nodes.length; i++) { var node = nodes[i]; if (node.parentIndex === id) { node.children = getChildren(nodes, node.id); result.push(node); } } return result; } // 构建 DOM 树 function buildTree(parentNode, children) { for (var i = 0; i < children.length; i++) { var childNode = children[i]; var tr = $('<tr class="treegrid-' + childNode.id + '"><td>' + childNode.name + '</td></tr>'); parentNode.append(tr); if (childNode.children && childNode.children.length > 0) { var subTable = $('<table></table>'); tr.append(subTable); buildTree($('<tbody></tbody>').appendTo(subTable), childNode.children); } } } // 主程序 const username = 'hzx>' var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == XMLHttpRequest.DONE) { alert("返回值:" + xhr.responseText); if (xhr.status == 200) { var jsonData = JSON.parse(xhr.responseText); }else { alert("请求失败:" + xhr.statusText); } } xhr.open("GET","shouquan.php?username=".username, true); xhr.send(); }; var root = { id: rootId, name: rootName, children: getChildren(jsonData, rootId) }; buildTree($('#tree tbody'), root.children); // 初始化 treegrid $('#tree').treegrid({ expanderExpandedClass: 'glyphicon glyphicon-minus', expanderCollapsedClass: 'glyphicon glyphicon-plus' });代码修改
时间: 2023-12-03 08:46:51 浏览: 23
感谢您分享代码!不过看到您的代码中有一些错误,我帮您修改一下:
1. 在发送 XMLHttpRequest 请求时,应该将 `xhr.open` 和 `xhr.send` 放在 `if` 语句外面。
2. 将 `var jsonData = JSON.parse(xhr.responseText);` 放在 `if` 语句内部,以避免在请求失败时出现 `jsonData` 未定义的情况。
3. 在 `const username = 'hzx>'` 中应该将大于号(>)改为等于号(=)。
4. 在 `buildTree` 函数中,应该先将 `tr` 添加到 DOM 中,再根据是否有子节点添加子表格。
修改后的代码如下所示:
```
// 根节点ID和名称
var rootId = "N000";
var rootName = "菜单";
// 获取指定节点下的所有子节点
function getChildren(nodes, id) {
var result = [];
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
if (node.parentIndex === id) {
node.children = getChildren(nodes, node.id);
result.push(node);
}
}
return result;
}
// 构建 DOM 树
function buildTree(parentNode, children) {
for (var i = 0; i < children.length; i++) {
var childNode = children[i];
var tr = $('<tr class="treegrid-' + childNode.id + '"><td>' + childNode.name + '</td></tr>');
parentNode.append(tr);
if (childNode.children && childNode.children.length > 0) {
var subTable = $('<table></table>');
tr.append(subTable);
buildTree($('<tbody></tbody>').appendTo(subTable), childNode.children);
}
}
}
// 主程序
const username = 'hzx=';
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
if (xhr.status == 200) {
var jsonData = JSON.parse(xhr.responseText);
var root = { id: rootId, name: rootName, children: getChildren(jsonData, rootId) };
buildTree($('#tree tbody'), root.children);
// 初始化 treegrid
$('#tree').treegrid({
expanderExpandedClass: 'glyphicon glyphicon-minus',
expanderCollapsedClass: 'glyphicon glyphicon-plus'
});
} else {
alert("请求失败:" + xhr.statusText);
}
}
};
xhr.open("GET", "shouquan.php?username=" + username, true);
xhr.send();
```