Ole Schneider: JS-Funktionaufruf aus XML dynamisch zusammenbauen

Beitrag lesen

He ho ihr alle,

ich beschäftige mich mit AJAX und hatte grad ne (für meinen Anwendungsfall) super Idee. Leider weiß ich net ob sich das umsetzen lässt und brauch deshalb eure Hilfe.

Die Idee: ich möchte vom Server sog. Updates in Form von XML an den Client senden. Ein Update kann prinzipiell alles sein: das komplette Ersetzen eines Teil des DOM, das Ersetzen eines einzelnen Textknoten etc. Wie genau der Client mit den Updates umzugehen hat steht im XML. Da jedes Update auf dem Client von ner bestimmten Funktion umgesetzt wird, sieht das XML das der Client erhält so aus:

<updates>
  <update>
    <function>handleThis</function>
    <parameter><![CDATA[42]]</parameter>
    <parameter><![CDATA[etwas Text]]</parameter>
  </update>
  <update>
    <function>andHandleThat</function>
    <parameter><![CDATA[<p id="xy"> some 'invalid' HTML <]]</parameter>
  </update>
  ...
</update>

Wichtig:
 - die Parameterliste ist unterschiedlich lang, klar... :-)
 - jeder Parameter ist in ner CDATA-Section enthalten, da es sein kann, dass hier HTML-Code übergeben wird, der definitiv nicht XML-konform ist.

Der Client geht also her, holt sich alle "update"-Knoten und ruft für jeden die darin enthaltene Funktion mit der entsprechenden Parameterliste auf.
Klar könnte ich den Funktionsaufruf nun als String zusammenbauen und per eval() ausführen. Das funktioniert aber nur, wenn der im Parameter enthaltene HTML Code keine " bzw. ' enthält - also NIE!
Was funktioniert ist den HTML Code mittels JS-Dom-Funtionen aus dem XML zu holen und an ne Funktion zu übergeben, von der ich BEREITS WEISS, dass sie die richtige ist, also so:

...
var html = parameter[i].firstChild.data;
doSomethingWithTheHtml(html);
...

Nochmals: Im Beispiel kenne ich die Funktion schon. Bei dem Ansatz wie ich es gerne hätte, erfahre ich die Funktion auch erst aus dem XML. Sie liegt mir also nur als String vor.

Wie kann ich das machen? Bin kein son JS-Experte - wie man vielleicht gemerkt hat... :-)

Tausend Dank. Ich bleib die Nacht wach und warte auf eure Antworten.

Ole