Java Reference
In-Depth Information
Eine universelle Funktion zum Erzeugen eines XHr-Objekts
Betrachten Sie das nachfolgende Listing (erzeugeXHR.js) , das wir in der Folge in alle AJAX-
Beispiele einbinden werden und das neben der Standardvariante zur Erzeugung des XHR-
Objekts die beiden einzigen relevanten Sondersituationen für eine proprietäre Erzeugung
beinhaltet:
Listing 10.3■ Universelle Erzeugung eines XHR-Objekts
function erzXHRObjekt() {
var resObjekt = null;
try {
resObjekt = new ActiveXObject("Microsoft.XMLHTTP");
} catch(Error) {
try {
resObjekt = new ActiveXObject("MSXML2.XMLHTTP");
} catch(Error) {
try {
resObjekt = new XMLHttpRequest();
} catch(Error) {
alert("Erzeugung des XMLHttpRequest-Objekts nicht möglich");
}
}
}
return resObjekt;
}
Die Funktion legt zuerst eine lokale Variable resObjekt an. Diese soll eine Referenz auf das
XHR-Objekt aufnehmen und als Rückgabewert der Funktion dienen. Am Anfang hat sie den
Wert null . Damit wird sie von JavaScript implizit den Datentyp Object erhalten. Danach
versuchen wir das erste Mal, ein XHR-Objekt zu erzeugen. Es ist im Grunde vollkommen
ohne Belang, welche der drei zur Verfügung stehenden Varianten wir zuerst probieren. Hier
wird mit resObjekt = new ActiveXObject("Microsoft.XMLHTTP"); zuerst versucht, das
Objekt mit dem älteren XML-Parser von Microsot zu erzeugen. Hat dies funktioniert, wird
der nachfolgende catch -Block komplett übersprungen und mit return resObjekt; das
XHR-Objekt zurückgegeben. Geht der erste Versuch schief, wird eine Ausnahme ausgewor-
fen und der Programmluss macht mit der ersten Anweisung im ersten catch -Block weiter.
Wir versuchen dann, das Objekt mit der neueren Version des XML-Parser von Microsot zu
erzeugen ( resObjekt = new ActiveXObject("MSXML2.XMLHTTP"); ). Auch hier gilt wieder:
Hat dies funktioniert, wird der nachfolgende catch -Block komplett übersprungen und das
XHR-Objekt zurückgegeben. Ist auch der zweite Versuch in die Hose gegangen, springt der
Programmluss in den zweiten catch -Block und dort starten wir einen dritten Versuch, das
Objekt mit new XMLHttpRequest(); zu erzeugen.
Nun ist die weitere Abfolge eine Frage der Programmlogik. In unserem Fall packen wir auch
den dritten Versuch in ein try-catch -Konstrukt. Das ist im Grunde nicht notwendig, denn
wenn auch der dritte Versuch scheitert, sollte das Skript zum Nachladen von Daten per
AJAX beendet werden. Eine nicht aufgefangene Ausnahme würde genau das bewirken.
Wir gehen jedoch etwas eleganter vor. Im Erfolgsfall gilt wieder, dass wie gewünscht das
Objekt zurückgegeben wird. Bei Misserfolg wird dem Besucher eine Fehlermeldung ange-
zeigt und dann von der Funktion der Wert null zurückgegeben (das ist der Initialisierungs-
wert - dieser wurde nicht verändert, wenn das Skript bis zu dieser Stelle kommt).
 
Search WWH ::




Custom Search