AJAX Spuk im CMS - neuer Code wird generiert
rsp
- javascript
Hallo Leute,
ich stehe derzeit vor einem wirklich seltsamen Problem: Ich habe ein CMS programmiert, mit welchem man Texte bzw. HTML in DIVs eintippen kann und den Inhalt dann mit einem Klick in einer Datenbank speichert.
Das Seltsame ist nun, dass (ich denke mal dass es bei diesem Schritt passiert) während dem AJAX Request auf einmal Code dazugezaubert wird. So wird aus
<table><tr><td>hallo</td></tr></table>
auf einmal
<table><tbody><tr><td>hallo</td></tr></tbody></table>
etc.! Das ist einerseits zwar ganz schön, allerdings kommt es auch zu Problemen. Und zwar immer wenn ich eine größere Tabelle einfügen will (dessen Code mir Dreamweaver generiert hat nachdem ich ein Word-Dokument in die Designansicht kopiert habe), wird zwar alles in die Datenbank geschrieben, nur gehen der Tabelle etliche Zeilen mit 2-3 Leerzeichen vorraus. Diese muss ich dann in einem Zwischenritt noch einmal raus löschen, danach kann ich wieder Speichern ohne dass irgendetwas Seltsames passiert.
Es ist mir wirklich ein Rätsel...
Hatte jemand schon einmal etwas dergleichen?
Gruß,
rsp
Hatte jemand schon einmal etwas dergleichen?
tbody-Elemente sind in HTML optional, werden aber beim Parsen implizit eingefügt (dh. wenn sie fehlen, werden sie automatisch eingefügt, wenn sie bereits vorhanden sind, bleiben sie bestehen). In XHTML sind diese Elemente ebenfalls optional, können aber nur explizit eingefügt werden (wenn sie fehlen, fehlen sie weiterhin - wenn sie vorhanden sind bleiben sie vorhanden).
Ausgangslage:
<table>
<tr><td /><tr>
</table>
HTML macht draus:
<table>
<tbody>
<tr><td /><tr>
</tbody>
</table>
XHTML macht draus:
<table>
<tr><td /><tr>
</table>
Ausgangslage 2:
<table>
<tbody>
<tr><td /><tr>
</tbody>
</table>
HTML macht draus:
<table>
<tbody>
<tr><td /><tr>
</tbody>
</table>
XHTML macht draus:
<table>
<tbody>
<tr><td /><tr>
</tbody>
</table>
<tr><td /><tr>
Nachtrag - das sollte natürlich in allen drei (sechs) Fällen <tr><td /></tr>
sein :) das tr
-Element muss natürlich geschlossen werden.
Danke für deine Antwort - die Seite ist als XHTML 1.0 deklariert!
Kann es sein dass während diesem Einfügeprozess die unnötigen Zeilen am Anfang entstehen?
Deine Ausführungen zu XHTML stimmen, allerdings solltest du darauf hinweisen, dass das nur gilt, wenn XHTML nicht »HTML-kompatibel« als text/html, sondern als application/xhtml+xml oder gleichwertig ausgeliefert wird - also im Browser auch von einem XML-Parser verarbeitet wird.
Ich denke nicht, dass das beim Fragesteller der Fall ist, deshalb gilt für ihn das, was du hinsichtlich HTML ausgeführt hast: tbody wird eingefügt.
Mathias
Ich denke nicht, dass das beim Fragesteller der Fall ist, deshalb gilt für ihn das, was du hinsichtlich HTML ausgeführt hast: tbody wird eingefügt.
Wird der xmlhttprequest nicht durch einen XML-Parser gejagt oder täusche ich mich da?
Wird der xmlhttprequest nicht durch einen XML-Parser gejagt oder täusche ich mich da?
Wenn man bloß element.innerHTML = xmlhttprequest.responseText macht, dann nicht. Wenn der Server einfach text/html, text/plain o.ä. anstatt application/xml ausliefert, dann nicht. Wenn man nicht das XML-DOM unter xmlhttprequest.responseXML nutzt, dann nicht.
Mathias
Wenn man bloß element.innerHTML = xmlhttprequest.responseText macht, dann nicht. Wenn der Server einfach text/html, text/plain o.ä. anstatt application/xml ausliefert, dann nicht. Wenn man nicht das XML-DOM unter xmlhttprequest.responseXML nutzt, dann nicht.
Vielen Dank - aber nochmal zum Verständnis: Wenn der Server die Antwort als text/html ausliefert, ich aber die .responseXML nutze, wird es nicht durch den XML-Parser geschickt?
Wenn der Server die Antwort als text/html ausliefert, ich aber die .responseXML nutze, wird es nicht durch den XML-Parser geschickt?
Korrekt.
responseXML ist in dem Fall null. Wo kein XML, da kein XML-DOM in responseXML.
Wenn man ein HTML-DOM will, muss man responseText ins bestehende Dokument einmontieren.
Was ginge: XHTML als XML ausliefern, dann hat man Zugriff auf responseXML, dann kann man Knoten zwischen den DOMs herkopieren. Bringt aber m.E. keinen Vorteil gegenüber innerHTML, eher den Nachteil, dass es nicht browserübergreifend funktioniert (IE zickt da).
Mathias
Wenn der Server die Antwort als text/html ausliefert, ich aber die .responseXML nutze, wird es nicht durch den XML-Parser geschickt?
Insofern sind »XMLHttpRequest« und noch vielmehr »Ajax« äußerst irreführende Bezeichnungen, die über den Gegenstand vor allem Missverständnisse aufkommen lassen.
In 99% der Nutzung von XMLHttpRequest kommt XML gar nicht vor, dito bei »Asynchronous JavaScript and XML« (Ajax). Die tatsächliche Nutzung von XMLHttpRequest hat mit dem Interface-Konzept »Ajax: A New Approach to Web Applications«, wie es von Jesse James Garrett einst beschrieben wurde, ohnehin wenig zu tun.
Mathias
wenn ich eine größere Tabelle einfügen will (dessen Code mir Dreamweaver generiert hat nachdem ich ein Word-Dokument in die Designansicht kopiert habe), wird zwar alles in die Datenbank geschrieben, nur gehen der Tabelle etliche Zeilen mit 2-3 Leerzeichen vorraus. Diese muss ich dann in einem Zwischenritt noch einmal raus löschen
Ich denke nicht, dass das am Einfügen des tbody liegt - wie gesagt ist das »immer da«, auch wenn seine Tags fehlen. Ob tbody da ist oder nicht, davon kommen keine Zeilen mit Leerzeichen *vor* der Tabelle.
Es kann aber an anderen automatischen Markup-Korrekturen liegen, die der Browser vornimmt. Vielleicht solltest du denen nochmal auf die Spur gehen.
Mathias