Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   AJAX geht nicht mit XHTML! (https://www.delphipraxis.net/50634-ajax-geht-nicht-mit-xhtml.html)

derpepe 28. Jul 2005 18:26


AJAX geht nicht mit XHTML!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

es geht um ein PHP-Programm das mal ein CMS werden soll :-)

Die erstellten Seiten liefere ich, je nach Browser als XHTML aus (für z.B. Firefox usw.) oder als HTML (für IE). Damit meine ich, dass ich im Header als Content-Type application/xhtml+xml oder text/html angebe.

Jetzt bin ich grad dran AJAX-Funktionen einzubauen und bin auf ein sehr kurioses Problem gestoßen:
Liefere ich die Seite als HTML aus klappt alles einwandfrei.
Liefere ich die Seite an Firefox 1.0.4 als XHTML aus, wird das JavaScript nicht ausgeführt.

Anbei mal mein HTML-Quelltext den ich ausliefere als Beispiel.

Hab ich da was mit den SCRIPT-Tags falsch gemacht? Gibt es da bei XHTML etwas zu beachten?
Oder hab ich einen Fehler im Firefox gefunden?

Ich bin für jede Antwort dankbar!


BTW: Es handelt sich um einen reproduzierbaren Fehler.

edit:X-Post http://www.xhtmlforum.de/viewtopic.php?t=5060

alcaeus 28. Jul 2005 18:49

Re: AJAX geht nicht mit XHTML!
 
Moin derpepe,

warum lieferst du es je nach Browser als XHTML bzw. HTML aus? :gruebel:
Entweder ist etwas XML oder HTML, AFAIR kann man das nicht so einfach kombinieren wie es dir passt. Von daher passen auch schon die ersten Zeilen IMO nicht (zuerst ein XML-Doctype, danach ein XHTML? :gruebel:

Noch was: formatier den JS-Code, der sieht ja grauenhaft aus :roll:

Greetz
alcaeus

derpepe 28. Jul 2005 19:02

Re: AJAX geht nicht mit XHTML!
 
Zitat:

Zitat von alcaeus
Moin derpepe,

warum lieferst du es je nach Browser als XHTML bzw. HTML aus? :gruebel:
Entweder ist etwas XML oder HTML, AFAIR kann man das nicht so einfach kombinieren wie es dir passt. Von daher passen auch schon die ersten Zeilen IMO nicht (zuerst ein XML-Doctype, danach ein XHTML? :gruebel:

Noch was: formatier den JS-Code, der sieht ja grauenhaft aus :roll:

Greetz
alcaeus

Also: :-D

Der XHTML-1.0-Standard sieht vor, dass ein Dokument ein XML-Dokument ist, das HTML-Tags enthält. Das witzige dabei ist, dass der IE kein XHTML kann, er stellt die Seiten dann im sog. Quirks-Modus dar, d.h. er tut so als ob es sich um HTML handelt.
Wenn Du die Seite (korrekterweise) als XML auslieferst, zeigt der IE einen Downloaddialog an.
Das ist auch der Grund warum ich dem IE die Seite als HTML und nicht als XHTML ausliefere.

Browser wie Firefox die XHTML beherrschen parsen das ganze als XML-Dokument, d.h. sie finden jeden Fehler, was XHTML sehr viel weniger fehleranfällig als HTML macht und auch der Grund ist warum mir XHTML gefällt :zwinker:
Lediglich das AJAX-Zeug scheint nicht zu funktionieren.


Der vorliegende Code ist also valides XHTML. Kannst ja auch mal den W3C-Validator drüberlaufen lassen ;-)
(http://validator.w3.org/)


BTW: XHTML 1.1 (der aktuelle Standard) läßt es nicht mehr zu, dass "blöden" Browsern wie dem IE der Code als HTML angedreht wird. Deshalb ist es totaler Blödsinn heute XHTML 1.1 zu verwenden, da alle IE-Benutzer de facto ausgeschlossen sind.


Zu Deinem Tipp den JS-Code zu formatieren: Der JS-Code stammt nicht von mir, ich verwende die PHP-Klassen von flxAJAX (http://tripdown.de/flxajax/), die den kompletten JS-Code selbst generieren.
Das Problem ist ja auch nicht das JavaScript, es funktioniert ja auch wenn man die Seite als HTML-Seite ausgibt.


edit:
Noch kurz was dazu:
Zitat:

Zitat von alcaeus
AFAIR kann man das nicht so einfach kombinieren wie es dir passt. Von daher passen auch schon die ersten Zeilen IMO
nicht (zuerst ein XML-Doctype, danach ein XHTML? :gruebel:

Da hab ich schon recht, überall bei Google liest man das (z.B. http://www.comet-doku.info/schule/xhtml/k51.shtml).

Allerdings kann man das wohl auch weglassen :wiejetzt:

Mit find ich sicherer und besser :!:

Chewie 28. Jul 2005 20:28

Re: AJAX geht nicht mit XHTML!
 
@derpepe:

Schau dir mal deinen Script-Code an:

Code:
<script type="text/javascript">
<!--
        // flexible ajax library
        // author: clemens krack <ckrack@gmail.com> [url]http://tripdown.de[/url]
        var flxajax_request_type = "GET";
Du verwendest innerhalb des <script>-Elements spitze Klammern, also das Trennzeichen für Elemente!
Klar, dass das kein valides (in diesem Fall nicht mal wohlgeformtes) XML mehr sein kann. Damit es dass wieder wird, musst du den Text innerhalb deines <script>-Elementes als CDATA (nicht als PCDATA, was es standardmäßig ist) deklarieren. Also du legst einfach folgenden Block außenrum:

Code:
<script>
 <![CDATA[ ... Inhalt ... ]]>
</script>
Das gleiche gilt auch für Stylesheets, falls du dort auch spitze Klammern verwendest. Oder halt gleiche eine externe Datei verwenden.

derpepe 28. Jul 2005 20:35

Re: AJAX geht nicht mit XHTML!
 
Cool, das ist doch mal eine Antwort! :cheers:
Sowas in der Art hatte ich ja schon vermutet.

Aber sag mir eins:
Bei folgendem Code:
Delphi-Quellcode:
<script>
<![CDATA[
 ... Inhalt ...
]]>
</script>
Interpretiert da JavaScript die Zeile mit ]]> nicht als ungültigen Syntax?
Müßte das nicht in etwa so aussehen:
Delphi-Quellcode:
<script>
<![CDATA[
 ... Inhalt ...
// ]]>
</script>
???


edit:Aber als HTML-Quelltext ist das ja besch*****, was da wohl der IE macht? Gleich mal testen...
edit2:Es ist lächerlich!! :( Egal wie ich es mit CDATA mache, der IE zeigt an "Fehler in Javascript: Objekt erwartet", dafür tuts im Firefox. Es kann doch nicht sein dass ich für jeden Browser ein eigenes Dokument ausliefern muss nur weil MS zu blöde ist dem IE XHTML korrekt beizubringen!? :cry:

Chewie 28. Jul 2005 20:44

Re: AJAX geht nicht mit XHTML!
 
Hm ja, aus Sicht des Interpreters sollte das besser so sein. Hab ich übersehen, sorry. Ist das gleiche wie die - Geschichte.

Chewie 28. Jul 2005 20:47

Re: AJAX geht nicht mit XHTML!
 
Zitat:

Zitat von derpepe
C
edit2:Es ist lächerlich!! :( Egal wie ich es mit CDATA mache, der IE zeigt an "Fehler in Javascript: Objekt erwartet", dafür tuts im Firefox. Es kann doch nicht sein dass ich für jeden Browser ein eigenes Dokument ausliefern muss nur weil MS zu blöde ist dem IE XHTML korrekt beizubringen!? :cry:

Setz vieeleicht auch mal JS-Kommentare vor das beginnende CDATA. HtmlTidy baut mit sowas rein:

[code]
<script>
//<![CDATA[
//<!--
... Inhalt ...
//]]>
//-->
</script>

derpepe 28. Jul 2005 20:48

Re: AJAX geht nicht mit XHTML!
 
Und wie kann ich den Beginn
Delphi-Quellcode:
<![CDATA[
"maskieren"?

Wenn ich
Delphi-Quellcode:
<script>
// <![CDATA[ 
...
schreibe ist das wohl kaum noch gültig, oder? :-(

edit:Die Antwort kam vor der Frage :mrgreen:

derpepe 28. Jul 2005 20:51

Re: AJAX geht nicht mit XHTML!
 
Zitat:

Zitat von Chewie
Zitat:

Zitat von derpepe
C
edit2:Es ist lächerlich!! :( Egal wie ich es mit CDATA mache, der IE zeigt an "Fehler in Javascript: Objekt erwartet", dafür tuts im Firefox. Es kann doch nicht sein dass ich für jeden Browser ein eigenes Dokument ausliefern muss nur weil MS zu blöde ist dem IE XHTML korrekt beizubringen!? :cry:

Setz vieeleicht auch mal JS-Kommentare vor das beginnende CDATA. HtmlTidy baut mit sowas rein:

[code]
<script>
//<![CDATA[
//<!--
... Inhalt ...
//]]>
//-->
</script>

Daraufhin beschwert sich Firefox mit
"XML-Verarbeitungsfehler: nicht wohlgeformt Adresse: http://localhost/eigene/PCMSdev/ajaxtest.pcms.php Zeile Nr. 101, Spalte 3:]]> --^"

Ist ja auch klar.
Wenn ich aber die zwei Zeilen tausche
Code:
//]]>
//-->
passiert dasselbe!??! :pale:

edit: Sorry, mein Fehler ;-)
Wenn ich es tausche klappt es doch, Kommentar im CDATA tztztz, darauf wär ich alleine nie gekommen!
Danke! :love:

Chewie 28. Jul 2005 20:53

Re: AJAX geht nicht mit XHTML!
 
Man muss ich das zunächst mal aus der Sicht des XML-Parsers vorstellen: Dieser kennt nur die Syntax von XML und das DTD für XHTML. Dass in einem Scipt-Element Javascript-Code steht, weiß der nicht, dass muss er auch nicht wissen. Für ihn steht da einfach nur Text (also Charactr Data) drin, keine weiteren Elemente.

Und Javascript kümmert sich nicht um XML-Kommentare oder CDATA-Direktiven. Der JS-Interpreter kriegt einfach das innerhalb des Script-Blockes übergeben, die Kommentare und die Direktiven kennt er nicht und betrachtet sie als Syntaxfehler.


Edit:


Äh, ups ja, die beiden waren natürlich in der falschen Reihenfolge. Aber warum das nicht tut, weiß ich jetzt auch nicht. Spiel mal ein bisschen damit rum, lass mal z.B. die Kommentare weg.
Und lass mal HTMLTidy drüberlaufen und schau dir an, was dort für Änderungen vorgeschlagen werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz