Archiv für die ‘Programmierung’ Kategorie

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

Dienstag, Oktober 12th, 2010

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 habe 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.

Wenn die eigenen Qt-basierten Programme unter Windows nicht starten, trotz DLLs…

Donnerstag, Juni 10th, 2010

Langer Titel, kurze Lösung:

im Qt-SDK-Ordner gibt es mehrere bin-Verzeichnisse.  Eins davon ist \bin und das andere \qt\bin.  Also wenn das SDK im Verzeichnis C:\Qt installiert, dann sollte man seine Anwendungen mit den DLLs in C:\Qt\qt\bin ausliefern, nicht mit denen in C:\Qt\bin.

Da ich dies in der Schule schreibe und Facebook dort mal wieder gesperrt ist, landet das jetzt hier im Blog…  sicherlich steht das was ich da rausgefunden habe, in irgendeiner Dokumentation, aber über die bin ich noch nicht gestolpert und ich wollte es mir halt notieren.