Mit PHP eine XML-Datei erzeugen und diese mit AJAX verwenden

ManicMarble

Erfahrenes Mitglied
Guten Morgen,
ich fange grade an, mich mit Ajax zu beschäftigen und will mir das erst mal selbst erarbeiten anstatt fertige Frameworks zu verwenden. Ich will's halt von Grund auf kapieren.

Jetzt hänge ich an einer Sache fest, die doch eigentlich nicht so schwer sein kann:

Ich will per responseXML eine XML-Datei einlesen die just bei der Anfrage per PHP erzeugt werden soll. Offensichtlich ist es aber so, dass die XML-Datei hierfür die Endung .xml haben muss. Und um vorher von PHP geparst zu werden, muss die Datei jadoch die Endung .php haben. Ein echtes Dilemma...

Das muss doch irgendwie gehen, oder? Erst in Kombination mit einer serverseitige Scriptsprache entfaltet doch Ajax erst sein gesamtes Potential. Hab mit mod_rewrite rumprobiert aber das kann doch nicht sein, dass man zu solchen Mitteln greifen muss, oder?

Verratet mir doch mal schnell den Trick, bitte.
 
Am bequemsten aber nicht unbedingt einfachsten ist es wohl mit PHPs DOM-Funktionen. Du kannst aber auch das Datenformat JSON nehmen, welches ich aufgrund seiner Datenreduktion gegenüber XML bevorzugen würde. Skripte zum Generieren dieses Formats gibt es bereits für alle relevaten Sprachen.

Zu der Dateierweiterungsgeschichte: Solange die Daten mit richtigem Mime-Typ ausgeliefert werden, kann die Ressource bestimmt auch eine „php“-Dateierweiterung haben.
 
JSON sieht gut aus, da steige ich dann auch mal ein.

Vorher möchte ich aber - rein aus Prinzip - das mit dem XML hinkriegen. Du schreibst: "Solange die Daten mit richtigem Mime-Typ ausgeliefert werden...". Wie kann ich das sicher stellen? Hab's mit
PHP:
header("Content-Type: text/xml;");
probiert, klappt nicht... :(
 
Ich schicke mit AJAX ein Request an eine *.php-Datei und dort geb ich per [phpf]echo[/phpf] dann die Daten als XML aus... Bzw. ich lade eine XML als Template und parse sie dann, um den Code schön sauber zu halten ;) Funktioniert einwandfrei bei mir...
 
Genau so mache ich das auch.
Nur: bei mir liefert responseXML kein Objekt, das ich dann in JS mit DOM-Technik auswerten kann. Ein Beispiel:
Die Anfrage geht an ajax_xml.php. Diese Datei holt ein paar Daten aus der Datenbank und liefert ewas in der Art:
XML:
<?xml version="1.0" ?>
<root>
    <opt val="1" txt="Hallo" />
    <opt val="2" txt="Welt" />
</root>
In JS - nach dem ganzen Anfrage-Einleitungs-Hickhack - kommt dann schließlich die entscheidende Zeile:
Javascript:
var xmldoc = ajax_request.responseXML;
Nun sollte xmldoc ein verarbeitbares DOM-Objekt sein. So sollte bspw. die Zeile
Javascript:
alert(xmldoc.getElementsByTagName('root').item(0).firstChild.txt);
"Hallo" ausspucken. Es kommt aber "undefined".
Wenn ich eine exakt identische XML-Datei manuell erzeuge, dieser die Dateiendung .xml verpasse und dann die Anfrage dort hin schicke klappt alles einwandfrei.

Übrigens @Gumbo: JSON hab' ich probiert, läuft wie geschmiert. Toll.
 
Zuletzt bearbeitet von einem Moderator:
Zurück