gpt4 book ai didi

javascript - JQuery Treeview 不能与 Ajax 一起工作

转载 作者:行者123 更新时间:2023-11-29 18:37:55 25 4
gpt4 key购买 nike

一般而言,我是 JQuery 和 Web 开发的新手。我正在尝试从 XML 文件加载一些数据并构建一个无序列表。我已经让那部分工作了,现在我正在尝试使用 TreeView插件,这样我就可以折叠/展开数据。数据加载如下:

$(document).ready(function(){
$.ajax({
type: "GET",
url: "solutions.xml",
dataType: ($.browser.msie) ? "text" : "xml",
success: function(data) {
var xml;
if (typeof data == "string") {
// Work around IE6 lameness
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
}

list = ""
$(xml).find("Group").each(function() {
group = $(this).attr("name");
list += "<li><span>" + group + "</span><ul>";

$(this).find("Solution").each(function() {
solution = $(this).attr("name");
list += "<li><span>" + solution + "</span></li>";
});

list += "</ul></li>";
});

$("#groups").html(list);
},

error: function(x) {
alert("Error processing solutions.xml.");
}
});

$("#groups").treeview({
toggle: function() {
console.log("%s was toggled.", $(this).find(">span").text());
}
});
});

HTML 看起来像这样:

<html>
...
<body>
<ul id="groups">
</ul>
</body>
</html>

无序列表正确显示,但小的 [+] 和 [-] 符号不显示,并且这些部分不可折叠/展开。如果我摆脱我的 Ajax 加载并在 #groups 中手动插入一个无序列表,它会按预期工作。

我做错了什么?是否有任何其他插件或 Javascript 库可以使这更容易?该解决方案需要在本地(即网络服务器)上运行 IE6。

更新:我找到了一个解决方法:如果我像这样定义我的 TreeView 内容,它就可以工作:

function makeTreeview() {
$("#container").treeview({
toggle: function() {
console.log("%s was toggled.", $(this).find(">span").text());
}
});
}
setTimeout('makeTreeview();', 50);

我认为问题是,当我创建 treeview 时,ajax 的东西还没有完成它的工作,所以当调用 treeview() 时,还没有创建无序列表。我还没有用 IE6 测试过这个。有没有更好的方法来做到这一点,而不使用 SetTimeout()?

最佳答案

我为另一个项目打了同样类型的电话。出于其他原因,您可能希望将 ajax 调用包装在一个匿名函数中以创建一个闭包,以便您的变量保持您期望的状态...

success 方法是一个回调函数,在您的调用完成后发生,只需在该方法中创建您的 TreeView ,或者如果您需要为了清楚起见将其分解为一个单独的函数。

在您展示的示例中 - 如果 ajax 调用花费的时间超过 50 毫秒,您的 TreeView 仍然会失败 - 如果从同一服务器加载两个以上的对象,这很容易在初始加载期间发生。

此示例使用 JSON,并发地从页面方法将 html 数据加载到一系列 div 中。

$(document).ready(function() { 
for (i= 1;i<=4;i++)
{
(function (){
var divname ="#queuediv"+i;

$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "test12.aspx/GetHtmlTest",
data: "{}",
error: function(xhr, status, error) {
alert("AJAX Error!");
},
success: function(msg) {
$(divname).removeClass('isequeue_updating');
$(divname).html(msg);
$("#somethingfromthemsg").treeview();
}
});
})();
}
});

希望对您有所帮助!

关于javascript - JQuery Treeview 不能与 Ajax 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com