„AJAX“ und XSLT: Wenn man seine Antwort nicht als XML bekommt

Heute wunderte ich mich, warum der Firefox mir mit Firebug offenbarte, dass mein XMLHttpRequest überhaupt keine XML-Daten zu Tage förderte, obwohl eine XML- bzw. besser gesagt eine XSLT-Datei geladen wurde.

var r = new XMLHttpRequest();
r.open("GET", "xslt/test.xslt", false);
r.send();
var xslt = r.responseXML;

r.responseXML war schlicht null.  Da konnte doch was nicht stimmen.  Firebug sagte mir schließlich auch, was:  die XSLT-Datei wird mit dem Content-Type text/plain übertragen.

Dadurch beschließt Firefox kurzerhand, dass es sich hierbei nicht um XML handelt.  Muss er ja theoretisch auch nicht, laut meinem Apache-Webserver handelt es sich um reinen Text.

Damit man die responseXML-Eigenschaft seines XHR benutzen kann, muss die Datei als application/xml oder ähnliches für den Browser als XML zu verstehender Datenstrom übertragen werden.  Also habe ich mal in die Apache-Konfigurationsdateien geguckt, um herauszufinden, dass MIME-Typen standardmäßig aus der Datei /etc/mime.types übernommen und benutzt werden und sich mit AddType <MIME-Typ> <.Dateinamenserweiterung> Direktiven überschrieben lassen.

Nach Suchen in der mime.types-Datei habe ich zwei einfache Lösungen anzubieten:

1. Die Dateiendung in xsl ändern.  .xsl-Dateien werden zumindest bei mir in der Standardkonfiguration als application/xml übertragen.  Dies ist daher wohl die einfachere Lösung.

2. Man fügt entweder der /etc/mime.types oder eine Apache-Konfigurationsdatei den MIME-Typ für XSLT-Dateien hinzu.  Infrage kommen dafür anscheinend text/xml, text/xsl und application/xml, sowie application/xslt+xml für XSLT-2.0-Dateien[1].  Für einen mime.types Eintrag orientiert man sich am besten an den dort bestehenden Einträgen, um einen für XSLT zu ergänzen.  In der Apache-Konfiguration könnte man zum Beispiel AddType text/xsl .xslt hinzufügen, wenn man denn möchte.