Icon für RSS-Feed Link zum XING-Profil
Wählen Sie eine Hintergrundfarbe:
Schwarzer Hintergrund Blauer Hintergrund Hellblauer Hintergrund Rose Hintergrund Grüner Hintergrund Grüner Hintergrund Olivfarbener Hintergrund Gelber Hintergrund Sandfarbiger Hintergrund Beiger Hintergrund Weisser Hintergrund
Texthintergrund:
Schwarzer Hintergrund Weisser Hintergrund Transparenter Hintergrund


Ladebild
Brick in the Wall

AJAX und das XMLHttpRequest-Objekt

Von Matu am 4. Juni, 2009 (14:00 Uhr) unter Kategorie: Javascript

Keine Sorge, ich möchte hier kein weiteres Tutorial über Ajax und das XMLHttpRequest-Objekt schreiben (es sei denn, es wird danach gefragt). Bestimmt wissen Sie, dass die verschiedenen Browser mit dem XMLHttpRequest-Objekt arbeiten, um Daten zwischen Server und Browser zu übertragen, ohne dass die Seite neu geladen werden muss.
Nur der Internet Explorer arbeitet mit einer MSXML-Komponente, die als ActiveX-Objekt geladen wird. Aus diesem Grund wird in fast allen Ajax-Tutorials eine Browserweiche eingebaut, um an das benötigte Objekt zu gelangen. Hier möchte ich Ihnen einen kürzeren Weg vorstellen.
Zunächst zwei übliche Browserweichen.
try/catch-Block:

function erzXMLHttpRequestObject(){

/* try/catch */
var resObjekt = null; //Object-Variable deklarieren
try{
   resObjekt = new ActiveXObject("Microsoft.XMLHTTP");//IE alt
  }
   catch(Error){
     try{
	  resObjekt = new ActiveXObject("MSXML2.XMLHTTP");//IE neu
     }
      catch(Error){
	  try{
	     resObjekt = new XMLHttpRequest();//IE7+, Firefox, Chrome, Opera, Safari
	  }
	  catch(Error){
		alert("Erzeugung eines XMLHttpRequest-Objekts ist nicht möglich");
	  }
      }
  }
	return resObjekt;//Rückgabe des Objekts !
}

Oder über eine if/else-Abfrage:

/* if/else */
function erzXMLHttpRequestObject()
{
var resObjekt = null;
if (window.XMLHttpRequest)
  {
  // IE7+, Firefox, Chrome, Opera, Safari
  resObjekt = new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {
  // IE6, IE5
  resObjekt = new ActiveXObject("Microsoft.XMLHTTP");
  }
else
  {
  alert("Erzeugung eines XMLHttpRequest-Objekts ist nicht möglich!");
  }
  return resObjekt;
}

Bei Wikipedia finden Sie auch noch eine Möglichkeit, die beides kombiniert.


Bei meinen endlosen Recherchen habe ich eine weitere Lösung gefunden, die ich schon seit längerem ohne Probleme einsetze und die auf Microsofts Conditional Compilation (engl. bedingte Ausführung) basiert. Auf diese Weise lässt sich Javascript-Code vor allen Browsern bis auf den Internet Explorer “verstecken”. Dabei handelt es sich um ein Javascript-Kommentar.

 /*@cc_on ... @*/

Während alle anderen Browser dies ignorieren (da Kommentar), erkennt der IE in ‘@cc_on’ (Conditional Compilation –> CC) eine Anweisung und behandelt den Text zwischen öffnendem und schliessendem ‘@’-Zeichen als normalen Javascript-Code.
Durch diesen Sonderfall lässt sich eine schöne XMLHttpRequest-Erkennung basteln.

/*@cc_on @
    if (@_win32 && @_jscript_version >= 5)
      if (!window.XMLHttpRequest)
	 window.XMLHttpRequest = function() {
           return new  ActiveXObject('Microsoft.XMLHTTP')
         }
@end @*/

resObjekt = new XMLHttpRequest();

Durch (!window.XMLHttpRequest) wird dabei getestet, ob der XMLHttpRequest nicht schon existiert, was beim IE bis Version 6 ausgeschlossen ist. Der IE ab Version 7 kennt es dann endlich und lässt die Bedingung aus bzw. nutzt dann ebenfalls den “normalen” XMLHttpRequest.
Eine nette Geschichte, wie ich finde. Gefunden habe ich es hier: design-noir.de. Vielen Dank!
Übrigens lassen sich so auch noch weitere Konstrukte bauen.

if (/*@cc_on ! @*/ false) {
alert("Dies würde nur im IE ausgeführt werden, da bei allen anderen Browsern die Negation durch '!' nicht greift!");
}

Bei den ständigen Problemen mit den IEs für Webworker bestimmt ein interessanter Ansatzpunkt.

1 Star2 Stars3 Stars4 Stars5 Stars (9 votes, average: 4,89 out of 5)
Loading ... Loading ...

Deine Meinung ist mir wichtig!

Es besteht die Möglichkeit, Kommentare nachträglich innerhalb einer Zeitspanne von 5 Minuten zu ändern (Keine werblichen Kommentare)
Jeder 1. Kommentar muss freigeschaltet werden!

Smileys:spy:

Nach oben