XMLHttpRequest (kurz: XHR) ist eine Programmierschnittstelle für JavaScript zum Übertragen von Daten über HTTP. Entgegen dem Namen muss es sich bei diesen Daten nicht um XML handeln. XMLHttpRequest bildet einen Grundbaustein der Ajax-Technik.

XMLHttpRequest ermöglicht es einem Skript einer Webseite, Daten dynamisch vom Webserver abzurufen, ohne dass dazu die HTML-Seite neu geladen werden müsste. Dies war zuvor nur durch den Einsatz unsichtbarer HTML-Frames oder IFrames oder mit dynamisch nachgeladenen Skript-Dateien möglich.[1] Da beim XMLHttpRequest-Verfahren Daten asynchron verarbeitet werden können, muss ein Skript nicht warten, bis die Anfrage beantwortet ist, sondern kann sich so lange anderen Aufgaben zuwenden.

Die Schnittstellenbeschreibung des XMLHTTPRequest-Objekts gemäß dem Standardisierungsvorschlag des W3C.

Es können HTTP-Verfahren wie Anfragemethoden, Authentifizierung und Caching verwendet werden. Wenn eine Anfrage XML-Daten liefert, kann XMLHttpRequest diese alternativ als Text oder als DOM-Baumstruktur zurücksenden. Letzteres eignet sich beispielsweise dazu, mit Webservices zu kommunizieren.

Mit der Einführung von Web Workers wurde XHR durch die Fetch API abgelöst.[2][3]

Geschichte

Bearbeiten

Die XMLHttpRequest-Technik wurde ursprünglich von Microsoft entwickelt und stand im Internet Explorer ab Version 5.0 als ActiveX-Objekt zur Verfügung. Viele Webbrowser unterstützen diese API, neben dem Internet Explorer[4] (ab Version 7 als XMLHttpRequest) sind das Mozilla und alle anderen Gecko-Derivate (ab Version 1.0),[5] Opera (ab Version 7.6 Beta) und Apple Safari (ab Version 1.2),[6] Konqueror und alle anderen KHTML-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 das W3C zur Standardisierung vorgeschlagen.[7]

Seit Ende 2012 wird die Spezifikation als fortlaufend weiterentwickelter Living Standard von der WHATWG geführt.[8]

Codebeispiel (JavaScript)

Bearbeiten

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:

var xmlHttp = null;
try {
    xmlHttp = new XMLHttpRequest();
} 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

Bearbeiten

XMLHttpRequest Level 2 war ein Arbeitsentwurfs (working draft) beim W3C für eine Erweiterung der Spezifikation um u. a. domain-übergreifende Abfragen und die Unterstützung von Datenströmen. Diese Erweiterungen sind seit 2012 in den Standard aufgenommen worden.[9][8]

Einzelnachweise

Bearbeiten
  1. On-Demand Javascript. In: ajaxpatterns.org. 30. Juli 2014, archiviert vom Original am 24. Juli 2015; abgerufen am 2. Dezember 2023 (englisch).
  2. XMLHttpRequest API. In: developer.mozilla.org. Mozilla, 8. November 2023, abgerufen am 30. November 2023 (englisch).
  3. Fetch API. In: developer.mozilla.org. Mozilla, 1. April 2023, abgerufen am 30. November 2023 (englisch).
  4. IXMLHTTPRequest Members. In: learn.microsoft.com. Microsoft, 27. Oktober 2016, abgerufen am 2. Dezember 2023 (englisch, Schnittstellenbeschreibung des XMLHttpRequest-Objekts für den IE).
  5. XMLHttpRequest. In: developer.mozilla.org. Mozilla, 22. November 2023, abgerufen am 2. Dezember 2023 (englisch, Schnittstellenbeschreibung des XMLHttpRequest-Objekts für Mozilla).
  6. Dynamic HTML and XML: The XMLHttpRequest Object. In: developer.apple.com. Apple, 24. Juni 2005, archiviert vom Original am 25. September 2011; abgerufen am 2. Dezember 2023 (englisch, Schnittstellenbeschreibung des XMLHttpRequest-Objekts für Safari).
  7. Anne van Kesteren et al.: XMLHttpRequest Level 1. In: w3.org. World Wide Web Consortium, 6. Oktober 2016, abgerufen am 2. Dezember 2023 (englisch, Schnittstellenbeschreibung des XMLHttpRequest-Objekts vorgeschlagen durch das W3C).
  8. a b XMLHttpRequest Standard. 1.1. Specification history. In: xhr.spec.whatwg.org. Web Hypertext Application Technology Working Group (WHATWG), 27. September 2023, abgerufen am 2. Dezember 2023 (englisch).
  9. Anne van Kesteren et al.: XMLHttpRequest Level 2. In: w3.org. World Wide Web Consortium, 18. November 2014, abgerufen am 2. Dezember 2023 (englisch).

📚 Artikel Terkait di Wikipedia

Cross-Site-Request-Forgery

RequireSsl = true; }); Bei alten Browsern, die XMLHttpRequests von verschiedenen Origin-Domänen zulassen, müssen XMLHttpRequests abgelehnt werden, wenn die im

Ajax (Programmierung)

JavaScript dient auch als Schnittstelle zwischen einzelnen Komponenten. Das XMLHttpRequest-Objekt, Bestandteil vieler Browser, um Daten auf asynchroner Basis

JSON

JSONPP. Üblicherweise erfolgen Ajax-Datenabfragen an Server über das XMLHttpRequest-Objekt eines Webbrowsers. Aufgrund der Same-Origin-Policy funktioniert

Dojo Toolkit

muss. Herkömmlich wird das über browserabhängige JavaScript-Anweisungen (XMLHttpRequest) getan. Dojo benutzt zur Abstraktion hiervon einen Wrapper (dojo

Cross-Origin Resource Sharing

HTTP-Anfragen. Mit der Verwendung von CORS ist es Webentwicklern möglich, normale XMLHttpRequests bzw. die JavaScript Fetch API zu benutzen, die eine bessere Fehlerbehandlung

Document Object Model

XML-Dokumente über HTTP versendet und abgerufen werden, wie es mit der bekannteren XMLHttpRequest-Technik möglich ist. DOM 3 XPath erlaubt das Auswählen von Knoten

Liste der HTTP-Headerfelder

Beschreibung Beispiel X-Requested-With Oft genutzt bei Ajax. X-Requested-With: XMLHttpRequest X-Do-Not-Track Befiehlt einer Website, das Verfolgen (Tracken) des

Nintendo DSi

einer Datei nein Upload einer Datei nein Adobe Flash nein HTML5 teils Plug-ins nein SVG nein Video nein XHTML ja XMLHttpRequest ja Bildanzeige teils