luti: jsTree, XML und asynchrones Nachladen

Hallo,

ich bastele gerade an einer dynamischen Baumstruktur. Die zu Grunde liegenden Daten liegen in einer Postgres-DB vor und umfassen in 7 Hierarchieebenen mit mehreren 1000 Einträgen. Mit PHP habe ich (dynamisch) eine nested XML-Datei erzeugt, so wie sie von jsTree verarbeitet wird.

Soweit so gut. Ich habe auch bereits eine funktionierende Version laufen, bei der die Daten „in einem Rutsch“ aus der XML-Datei gelesen werden. Leider dauert das initiale Laden etliche Sekunden – das ist bei der Datenmenge wohl verständlich. Daher möchte ich, dass erst beim Öffnen eines jeden Knotens die Daten dynamisch geladen werden. Hier scheitere ich jedoch, da fehlen mir wohl die entsprechenden Kenntnisse mit AJAX und JS …
Kann mir jemand helfen?

Hier das funktionierende, nicht-asynchrone Beispiel:

<script type="text/javascript">  
	$(function () {		  
		$("#tree")  
			.jstree({  
				"xml_data" : {  
					"ajax" : {  
						"url" : "treedata.xml.php"  
					},  
					"xsl" : "nest"  
				},  
				"plugins" : [ "themes", "xml_data" ],  
				"themes": {	"theme": "default", "dots": false, "icons": true }  
			});			  
	});  
</script>

Auf der jsTree-Seite gibt es ja ein Beispiel (Using the ajax config option (nested) und Using both the data & ajax config options (flat)), aber leider nicht ganz in der Kombination, die ich bräuchte. Wie muss der return-Teil bzw. die Funktion function (n) aussehen? Was muss in der XML-Datei stehen - der gesamte Baum?

Vielen Dank und Grüße!

  1. Hallo,

    hm, kann niemand helfen?

    Im Wesentlichen scheint mir das Problem zu sein, dass ich nicht verstehe, wie die function (n) {} funktioniert bzw. was dort hin soll. Im Beispiel mit der flachen Struktur wird jedes Mal einfach die xml-Datei noch einmal aufgerufen und in den Baum gehängt. Das ist ja schön für das Beispiel, aber für einen echten Ansatz kaum zu gebrauchen ... Muss ich die XML-Datei bei jedem Aufruf so ausgeben, dass nur der entsprechende Teilbaum ausgegeben wird? Und wenn ja, 1. warum? und 2. wie mache ich das? Ich kann ja keinen JavaScript-Parameter an PHP übergeben ...

    Vielleicht hat ja noch jemand eine Idee? Ich blicke da leider nicht mehr wirklich durch.

    Dank und Gruß,
    luti