Je suis nouveau sur JQuery et le développement web en général. J'essaye de charger quelques données d'un fichier XML et de construire une liste non ordonnée. J'ai cette partie de travail, maintenant j'essaye d'utiliser le TreeView plugin afin que je puisse réduire/développer les données. Les données sont chargées comme ceci:JQuery Treeview ne fonctionne pas avec Ajax
$(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());
}
});
});
et le code HTML ressemble à ceci:
<html>
...
<body>
<ul id="groups">
</ul>
</body>
</html>
La liste non ordonnée montre correctement, mais le petit [+] et [-] signes ne montrent pas et les sections ne sont pas pliables/extensibles. Si je me débarrasse de mon chargement Ajax et insère une liste non ordonnée à l'intérieur de #groups manuellement cela fonctionne comme prévu.
Qu'est-ce que je fais mal? Y a-t-il d'autres plugins ou libs Javascript qui pourraient rendre cela plus facile? La solution doit fonctionner localement sur IE6 (c'est-à-dire serveur Web).
Mise à jour: J'ai trouvé un travail autour: Si je définis mes trucs TreeView comme cela, il fonctionne:
function makeTreeview() {
$("#container").treeview({
toggle: function() {
console.log("%s was toggled.", $(this).find(">span").text());
}
});
}
setTimeout('makeTreeview();', 50);
Je pense que le problème est, quand je crée le TreeView, les choses ajax hasn » t fait son travail encore, donc quand treeview() est appelé, la liste non ordonnée n'a pas encore été créée. Je n'ai pas encore testé cela avec IE6. Existe-t-il une meilleure façon de faire cela, sans utiliser SetTimeout()?
Merci Jim, ça ressemble à ce que je cherche. Au sujet des 50ms, j'ai dû augmenter cela quand j'ai testé dans IE6, en raison de sa nature lente. Je vais tester cela demain et marquer votre réponse comme correcte, si cela fonctionne. –