- XHR
-
XMLHttpRequest ist eine API zum Transfer von beliebigen Daten über das Protokoll HTTP. Dabei können sämtliche HTTP-Anfragemethoden (unter anderem GET, POST, HEAD, PUT) verwendet werden. Wenn eine Anfrage XML-Daten liefert, kann XMLHttpRequest diese alternativ als Plaintext oder als DOM-Baumstruktur zurücksenden. Letzteres eignet sich beispielsweise dazu, mit Web Services zu kommunizieren. XMLHttpRequest kann aus JavaScript, JScript und VBScript heraus verwendet werden und bildet einen Grundbestandteil der Ajax-Technik.
XMLHttpRequest ermöglicht einem Skript einer Webseite, Daten dynamisch vom Webserver abzurufen, ohne dass dazu die Seite neu geladen werden müsste. Dies war zuvor nur durch den Einsatz unsichtbarer Frames/IFrames oder mit On-Demand JavaScript[1] möglich. Da XMLHttpRequest Anfragen asynchron verarbeiten kann, muss ein Skript nicht warten, bis die Anfrage beantwortet ist, sondern kann solange andere Aufgaben abarbeiten.
Geschichte
Die XMLHttpRequest-Technik wurde ursprünglich von Microsoft entwickelt und steht im Internet Explorer seit Version 5.0 als ActiveX-Objekt zur Verfügung. Viele Browser unterstützen diese API, neben dem Internet Explorer[2] sind das Mozilla und alle anderen Gecko-Derivate (ab Version 1.0)[3], Opera (ab Version 7.6 Beta) und Safari (ab Version 1.2)[4], Konqueror und alle anderen KHTML-Derivate.
Trotz der guten Verfügbarkeit der API in neueren Browsern wird an ihr auch Kritik geübt, da es schwierig ist, Webseiten, die XMLHttpRequest einsetzen, auch älteren Browsern in vollem Umfang zugänglich zu machen. Dies erklärt auch, warum XMLHttpRequest erst in neuerer Zeit vermehrt zum Einsatz kommt. Ein weiterer Kritikpunkt ist, dass sich Web-Anwendungen, die auf XMLHttpRequest setzen, nur schwer barrierefrei umsetzen lassen.
Wie aus den einzelnen Schnittstellenbeschreibungen der verschiedenen XMLHttpRequest-Implementierungen hervorgeht, sind diese nicht vollständig zueinander kompatibel. Aus diesem Grund wurde unlängst eine einheitliche Definition für das XMLHttpRequest-Objekt durch das W3C zur Standardisierung vorgeschlagen.[5] Eine zweite Spezifikation, die Domain-übergreifende Abfragen (d. h. die Daten, die das Skript abruft, befinden sich auf einer anderen Domain als es selbst) erlauben und damit über die bisherigen Implementierungen hinausgehen soll, ist beim W3C bereits in Arbeit.[6]
Codebeispiele (JavaScript)
Verwendung von XMLHttpRequest in Windows Internet Explorer (ab v5):
var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
Verwendung von XMLHttpRequest in Mozilla, Opera, Safari, Konqueror und Internet Explorer (ab v7):
var xmlHttp = new XMLHttpRequest();
Das folgende Beispiel ruft eine Ressource auf derselben Domain über XMLHttpRequest auf und gibt den Inhalt in einem Meldungsfenster aus:
var xmlHttp = null; // Mozilla, Opera, Safari sowie Internet Explorer (ab v7) if (typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } if (!xmlHttp) { // Internet Explorer 6 und älter try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { xmlHttp = null; } } } if (xmlHttp) { xmlHttp.open('GET', 'beispiel.xml', true); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { alert(xmlHttp.responseText); } }; xmlHttp.send(null); }
Quellen
- ↑ Ajax Patterns – On-Demand Javascript
- ↑ Schnittstellenbeschreibung des XMLHttpRequest-Objekts für den IE
- ↑ Schnittstellenbeschreibung des XMLHttpRequest-Objekts für Mozilla
- ↑ Schnittstellenbeschreibung des XMLHttpRequest-Objekts für Safari
- ↑ Schnittstellenbeschreibung des XMLHttpRequest-Objekts vorgeschlagen durch das W3C
- ↑ W3C-Vorschlag für „XMLHttpRequest 2“ / „cross-site extensions to XMLHttpRequest“
Wikimedia Foundation.