JS/DOM / Node-Objekt und AJAX-Request

Hab momentan ein kleines Problem: ich bekomme per AJAX einen XHTML-String herein. Diesen lade ich per request_object.responseXML.
Nun muss ich den nur noch in das bestehende XHTML-Document einfügen. Dazu existiert ein DIV, in den immer nur eine Antwort geladen werden soll.

Irgendwie komme ich mit dem Node-Objekt nicht klar…

[code]

[/code] [code]var content = request.responseXML.firstchild; document.replaceChild(content, document.getElementById('response'));[/code]

Du kannst einen Node nicht einfach so von einem Dokument ins andere “umhängen” - dazu müsstest du ihn erst mal mittels document.importNode in den Kontext des aktuellen Dokumentes übernehmen, bevor du ihn dort einhängen kannst.
Leider kennt der IE importNode immer noch nicht, so dass man es meist doch bei einer Übernahme des gelieferten HTML-Codes in Textform per innerHTML belässt.

Das hat bei mir im FF dazu geführt, dass er das gesamte XHTML-Document nur noch als HTML interpretiert.

Server sendet:

Firefox macht DOM-Struktur:

innerHTML sorgt für Reinterpretation als HTML:

und was das bewirkt ist klar… Soll ich mein Dokument doch als HTML4.1 ausgeben??? :neutral_face:

Erstens nein, und zweitens tut er das sowieso, so lange du deine Seite als text/html auslieferst - da wirft jeder Browser seinen “HTML Tag Soup Parser” an, und interpretiert das ganze als “stinknormales” HTML.

[quote]Server sendet:

Firefox macht DOM-Struktur:

Das zeigt dir bspw. FireBug bei leeren Elementen immer so an.

[quote]innerHTML sorgt für Reinterpretation als HTML:

Nein, tut’s nicht.

Nein, deswegen auf jeden Fall nicht.

Und btw., wenn du einem Browser eine identische Dokumentstruktur ein mal als HTML und ein mal als XHTML lieferst (“echtes”, also auch mit einem XML-Content-Type ausgeliefert) - dann wird der DOM-Baum, welchen der Browser daraus aufbaut, letztendlich doch wieder der gleiche sein.

Ich gebe mein Document nicht als text/html aus :wink: (Für den IE muss ich da noch was machen…)

Naja, dann probiers ich nochmal mit innerHTML, nur noch das:
Wie kann man ein DOM-Objekt zu einem XML-String umwandeln?

Ist für die Nuztung von innerHTML trotzdem egal, so lange der einzufügende Code auch gültiges XHTML darstellt.

Entweder schreibt man sich eine entsprechende Serialisierungsfunktion selber, oder man nutzt das, was vorhanden ist. Der IE kennt bspw. analog zu outerHTML bei den Knoten aus einem per AJAX angeforderten XML-Dokument auch eine Eigenschaft outerXML. (Und für den FF & Co. kann man ja nach wie vor mit dem “richtigen” DOM arbeiten.)