1.4 Worin besteht die Ajax-Schnittstelle?

Die Ajax-Schnittstelle besteht in einem speziellen JavaScript-Objekt, das HTTP-Requests absetzen und HTTP-Responses empfangen kann. Nun gehört ein solches Objekt nicht seit jeher zum Umfang von JavaScript, und deshalb stellt sich natürlich die Frage: wie und wo ist es implementiert, und welcher Browser kennt es?

Die Entwicklungen eines entsprechenden Script-Objekts gehen auf Microsoft zurück. Bereits 1997 verfügte der damalige MS Internet Explorer 4.0 über eine „Remote-Scripting-Komponente“, die allerdings nur mit dem hauseigenen Webserver Exchange funktionierte. Seit Produktversion 5.0 (1999) lässt sich im Internet Explorer ein XML-HTTP-Objekt in Form einer ActiveX-Komponente ansprechen. Seit Version 7.0 kennt der Internet Explorer ebenso wie alle übrigen heute verbreiteten Browser, also etwa Firefox, Safari oder Opera, ein ActiveX-unabhängiges XML-HTTP-Objekt.

Folgende Browserweiche genügt, um die Ajax-Schnittstelle in allen heute verbreiteten Browsern zu initialisieren:

   var httpRequest = false;
   if(window.XMLHttpRequest)  // Mozilla, Safari, Opera, MS IE 7, ...
       httpRequest = new XMLHttpRequest();
   else if(window.ActiveXObject) { // MS IE 5, 6
       try {
           httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
       }
       catch (e) {
           try {
               httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
           }
           catch (e) {}
       }
   }

Die Variable httpRequest soll das XML-HTTP-Objekt speichern. Über sie sind nach erfolgreicher Initialisierung Zugriffe auf Eigenschaften und Methoden des XML-HTTP-Objekts möglich. Zunächst wird die Variable mit dem Wert false initialisiert. Wenn ein XML-HTTP-Objekt erfolgreich initialisiert werden kann, ändert sich dieser Anfangswert.

Für alle modernen Browser genügt die Abfrage if(window.XMLHttpRequest). Damit wird geprüft, ob das XML-HTTP-Objekt im JavaScript-Interpreter verfügbar ist. Wenn ja, wird mit httpRequest = new XMLHttpRequest(); eine Instanz des Objekts in der zuvor erwähnten Variable httpRequest gespeichert.

Für das ActivX-basierte XML-HTTP-Objekt früherer Internet-Explorer-Versionen ist die Objektinitialisierung etwas komplexer. Mit if(window.ActiveXObject) wird zunächst herausgefunden, ob der Browser ein ActivXObject kennt, was ihn einigermaßen zuverlässig als Internet Explorer ausweist. Da es von Microsofts XML-HTTP-Objekt zwei Versionen gibt, wird auf beide Versionen geprüft. Zunächst wird getestet, ob die neuere Version ("Msxml2.XMLHTTP") verfügbar ist. Wenn nicht, wird versucht, die ältere Version ("Microsoft.XMLHTTP") anzusprechen. All diese Anfragen werden in try-catch-Statements eingebunden, um Laufzeitfehler zu vermeiden.

Die gute Nachricht lautet: es sind keine weiteren Verrenkungen für einzelne Browser erforderlich. Hat die Variable httpRequest ein XML-HTTP-Objekt gespeichert, kann fortan für alle Browser gleich programmiert werden, da das Objekt selbst, also seine Eigenschaften und Methoden, in allen Browsern gleich implementiert sind.

Seiten Revision: 2, zuletzt bearbeitet: 03 Jun 2009 18:58