XMLHttpRequest (kurz:XHR) ist eineProgrammierschnittstelle fürJavaScript zum Übertragen von Daten überHTTP. Entgegen dem Namen muss es sich bei diesen Daten nicht um XML handeln. XMLHttpRequest bildet einen Grundbaustein derAjax-Technik.
XMLHttpRequest ermöglicht es einem Skript einer Webseite, Daten dynamisch vomWebserver abzurufen, ohne dass dazu die HTML-Seite neu geladen werden müsste. Dies war zuvor nur durch den Einsatz unsichtbarerHTML-Frames oderIFrames oder mit dynamisch nachgeladenen Skript-Dateien möglich.[1] Da beim XMLHttpRequest-Verfahren Datenasynchron verarbeitet werden können, muss ein Skript nicht warten, bis die Anfrage beantwortet ist, sondern kann sich so lange anderen Aufgaben zuwenden.
Es können HTTP-Verfahren wieAnfragemethoden,Authentifizierung undCaching verwendet werden. Wenn eine AnfrageXML-Daten liefert, kann XMLHttpRequest diese alternativ als Text oder alsDOM-Baumstruktur zurücksenden. Letzteres eignet sich beispielsweise dazu, mitWebservices zu kommunizieren.
Mit der Einführung vonWeb Workers wurde XHR durch die Fetch API abgelöst.[2][3]
Die XMLHttpRequest-Technik wurde ursprünglich vonMicrosoft entwickelt und stand imInternet Explorer ab Version 5.0 alsActiveX-Objekt zur Verfügung. VieleWebbrowser unterstützen diese API, neben demInternet Explorer[4] (ab Version 7 als XMLHttpRequest) sind dasMozilla und alle anderenGecko-Derivate (ab Version 1.0),[5]Opera (ab Version 7.6 Beta) undApple Safari (ab Version 1.2),[6]Konqueror und alle anderenKHTML-Derivate.
Wie aus den einzelnen Schnittstellenbeschreibungen der verschiedenen XMLHttpRequest-Implementierungen hervorgeht, sind diese nicht vollständig zueinander kompatibel. Aus diesem Grund wurde im Dezember 2012 eine einheitliche Definition für das XMLHttpRequest-Objekt durch dasW3C zur Standardisierung vorgeschlagen.[7]
Seit Ende 2012 wird die Spezifikation als fortlaufend weiterentwickelterLiving Standard von derWHATWG geführt.[8]
Das folgende Beispiel ruft eine Ressource auf derselben Domain über XMLHttpRequest auf und gibt den Inhalt in einem Meldungsfenster aus. Wenn der Aufruf der Ressource fehlschlägt, wird keine Meldung ausgegeben:
varxmlHttp=null;try{xmlHttp=newXMLHttpRequest();}catch(e){// Fehlerbehandlung, wenn die Schnittstelle vom Browser nicht unterstützt wird.}if(xmlHttp){xmlHttp.open('GET','beispiel.xml',true);xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){alert(xmlHttp.responseText);}};xmlHttp.send(null);}
XMLHttpRequest Level 2 war ein Arbeitsentwurfs(working draft) beimW3C für eine Erweiterung der Spezifikation um u. a.domain-übergreifende Abfragen und die Unterstützung vonDatenströmen. Diese Erweiterungen sind seit 2012 in den Standard aufgenommen worden.[9][8]