XMLHttpRequest

  • Adressname der Version: DOM/XMLHttpRequest
  • Titel der Version: XMLHttpRequest
  • ID der Version: 384271
  • Erstellt:
  • Autor: paul_thomann
  • Aktuelle Version? Nein
  • Kommentar

Inhalt der Version

XMLHttpRequest ist ein JavaScript Objekt, das von Microsoft entwickelt und von Mozilla, Apple, and Google übernommen wurde. Es wird derzeit im W3C standardisiert. Es bietet einen einfachen Weg, Daten von einem URL zu erhalten. Trotz seines Namens kann man mit XMLHttpRequest jede Art von Daten laden, nicht nur XML, und es unterstützt auch andere Protokolle als HTTP (inklusive file und ftp).

Eine Instanz von XMLHttpRequest erzeugt man ganz einfach so:

var myRequest = new XMLHttpRequest();

Um mehr über den Umgang mit XMLHttpRequest zu erfahren, siehe Using XMLHttpRequest.

Übersicht: Methoden

XMLHttpRequest(JSObject objParameters);
void abort();
DOMString getAllResponseHeaders();
DOMString? getResponseHeader(DOMString header);
void open(DOMString method, DOMString url, optional boolean async, optional DOMString? user, optional DOMString? password);
void overrideMimeType(DOMString mime);
void send();
void send(ArrayBuffer data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
void setRequestHeader(DOMString header, DOMString value);
Nicht-Standard Methoden
[noscript] void init(in nsIPrincipal principal, in nsIScriptContext scriptContext, in nsPIDOMWindow ownerWindow);
[noscript] void openRequest(in AUTF8String method, in AUTF8String url, in boolean async, in AString user, in AString password);
void sendAsBinary(in DOMString body);

Eigenschaften

Attribut Typ Beschreibung

onreadystatechange

Function?

Ein JavaScript function Objekt, das bei jedem Wechsel des readyState Attributs aufgerufen wird. Das Callback wird aus dem Thread der Benutzerschnittstelle aufgerufen.

Warnung: Dies sollte nicht mit synchronen Anfragen und darf nicht aus nativem Code heraus verwendet werden.
readyState unsigned short

Der Status der Anfrage:

Wert Status Beschreibung
0 UNSENT open()wurde noch nicht aufgerufen.
1 OPENED send()wurde noch nicht aufgerufen.
2 HEADERS_RECEIVED send() wurde aufgerufen, und Headers sowie Status sind verfügbar.
3 LOADING Download ist im Gange; responseText enthält bereits unvollständige Daten.
4 DONE Der Vorgang ist abgeschlossen.
response variiert

Der Entitätskörper der Antwort (response entity body) gemäss responseType, als ein ArrayBuffer, Blob, {{ domxref("Document") }}, JavaScript Objekt (für "json"), oder string. Dies ist null falls die Anfrage nicht abgeschlossen ist oder erfolglos war.

responseText {{ReadOnlyInline()}} DOMString Die Antwort auf die Anfrage als Text, oder null falls die Anfrage nicht abgeschlossen ist oder erfolglos war.
responseType XMLHttpRequestResponseType

Kann gesetzt werden, um den Datentyp der Antwort zu ändern.

Wert Datentyp der response Eigenschaft
"" (leerer String) String (Das ist der Default)
"arraybuffer" ArrayBuffer
"blob" {{ domxref("Blob") }}
"document" {{ domxref("Document") }}
"json" JavaScript Objekt, geparsed aus einem JSON String, der vom Server zurückgegeben wird.
"text" String
"moz-blob" Wird von Firefox verwendet, um den Bezug partieller {{ domxref("Blob") }} Daten von progress Events zu erlauben. Dadurch kann ein progress Event Handler bereits mit der Verarbeitung von Daten beginnen, während ihr Empfang noch läuft. {{ gecko_minversion_inline("12.0") }}
"moz-chunked-text"

Ähnlich wie "text", aber streamt die Daten. Das bedeutet, dass der Wert in response nur während des "progress" Event verfügbar ist und jeweils nur die Daten enthält, die seit dem letzten "progress" Event eingetroffen sind.

Wenn auf response während eines "progress" Events zugegriffen wird, enthält es einen String mit den Daten. Andernfalls gibt es null zurück.

Dieser Modus funktioniert derzeit nur in Firefox. {{ gecko_minversion_inline("9.0") }}

"moz-chunked-arraybuffer"

Ähnlich wie "arraybuffer", aber streamt die Daten. Das bedeutet, dass der Wert in response nur während des "progress" Event verfügbar ist und jeweils nur die Daten enthält, die seit dem letzten "progress" Event eingetroffen sind.

Wenn auf response während eines "progress" Events zugegriffen wird, enthält es einen ArrayBuffer mit den Daten. Andernfalls gibt es null zurück.

Dieser Modus funktioniert derzeit nur in Firefox. {{ gecko_minversion_inline("9.0") }}

Anmerkung: Ab Gecko 11.0 {{ geckoRelease("11.0") }} sowie WebKit build 528 kann man in diesen Browsern das responseType Attribut nicht mehr für synchrone Anfragen benutzen. Der Versuch löst einen NS_ERROR_DOM_INVALID_ACCESS_ERR Fehler aus. Diese Änderung wurde dem W3C zur Standardisierung vorgeschlagen.
responseXML {{ReadOnlyInline()}} Document?

Die Antwort auf die Anfrage als DOM Document Objekt, oder null falls die Anfrage erfolglos war, noch nicht gesendet wurde, oder nicht als XML oder HTML geparst werden kann. Die Antwort wird geparst, als wäre sie ein text/xml Stream. Wenn der responseType auf "document" gesetzt wurde und die Anfrage asynchron gemacht wurde, wird die Antwort geparst, als wäre sie ein text/html Stream.

Anmerkung: Falls der Server nicht den text/xml Inhaltstyp-Header auf die Antwort anwendet, kann man overrideMimeType() verwenden, um XMLHttpRequest zu zwingen, sie dennoch als XML zu parsen.
status {{ReadOnlyInline()}} unsigned short Der Status der Antwort auf die Anfrage. Das ist der HTTP Ergebnis-Code (status ist z.B. 200 für eine erfolgreiche Anfrage).
statusText {{ReadOnlyInline()}} DOMString Der Antwort-String, der vom HTTP Server zurückgesendet wurde. Im Gegensatz zu status beinhaltet dies den ganzen Text der Antwortnachricht (z.B. "200 OK").
timeout unsigned long

Die Anzahl Millisekunden, die eine Anfrage dauern darf, bevor sie automatisch abgebrochen wird. Ein Wert von 0 (das ist die Voreinstellung) bedeutet, dass es kein timeout gibt. {{ gecko_minversion_inline("12.0") }}

Anmerkung: Für synchrone Anfragen mit einem besitzenden Fenster darf man kein timeout verwenden.
upload XMLHttpRequestUpload Das Hochladen kann mitverfolgt werden, indem man einen Event Handler zu upload hinzufügt.
withCredentials boolean

Zeigt an, ob Site-übergreifende Access-Control Anfragen mit Credentials wie Cookies oder Autorisierungs-Headers durchgeführt werden sollen oder nicht. Die Voreinstellung ist false.

Anmerkung: Anfragen an die ursprüngliche Site sind davon niemals betroffen.
Anmerkung: Ab Gecko 11.0 {{ geckoRelease("11.0") }} kann man das withCredentials Attribut nicht mehr für synchrone Anfragen verwenden. Der Versuch löst einen NS_ERROR_DOM_INVALID_ACCESS_ERR Fehler aus.

Nicht-Standard Eigenschaften

Attribut Typ Description
channel {{ReadOnlyInline()}} {{Interface("nsIChannel")}} Der Kanal, der vom Objekt zur Durchführung der Anfrage verwendet wurde. Das ist null falls der Kanal noch nicht erzeugt worden ist. Im Falle von mehrteiligen Anfragen ist das der anfängliche Kanal, nicht derjenige der anderen Teile der mehrteiligen Anfrage.
Zugriff nur mit erhöhten Rechten.
mozAnon {{ReadOnlyInline()}} boolean

Falls true wird die Anfrage ohne Cookie und Authentisierungs-Headers gesendet.

mozSystem {{ReadOnlyInline()}} boolean

Falls true wird die Regel, die nur Anfragen zum gleichen Ursprung erlaubt, für diese Anfrage nicht durchgesetzt.

mozBackgroundRequest boolean

Zeigt an, ob das Objekt eine Service-Anfrage im Hintergrund darstellt. Falls true wird keine Lastgruppe mit der Anfrage verknüpft, und die Anzeige von Sicherheits-Dialogen wird verhindert. Zugriff nur mit erhöhten Rechten.

In Fällen, wo normalerweise ein Sicherheits-Dialog angezeigt würde (wie Autorisierungs- oder Zertifikatsfehler-Benachrichtigungen), schlägt die Anfrage stattdessen einfach fehl.

Anmerkung: Diese Eigenschaft muss vor dem Aufrufen von open() gesetzt werden..
mozResponseArrayBuffer {{ gecko_minversion_inline("2.0") }} {{ obsolete_inline("6") }} {{ReadOnlyInline()}} ArrayBuffer Die Antwort auf die Anfrage, als typisiertes JavaSript Array. Dies ist NULL falls die Anfrage erfolglos war oder noch nicht gesendet wurde.
multipart {{ obsolete_inline("22") }} boolean

Dieses nur in Gecko verfügbare Feature wurde in Firefox/Gecko 22 entfernt. Bitte verwende stattdessen Server-Sent Events, Web Sockets oder responseText aus progress Events.

Zeigt an, ob als Antwort ein Stream von möglicherweise mehreren XML Dokumenten erwartet wird. Wird dies auf true gesetzt, muss der Inhaltstyp des ersten Teils der Antwort multipart/x-mixed-replace sein, sonst tritt ein Fehler auf. Alle Anfragen müssen asynchron sein.

Dies ermöglicht die Unterstützung von Server Push; für jedes XML Dokument, das in die Antwort auf diese Anfrage geschrieben wird, wird ein neues XML DOM Dokument erzeugt, und zwischen den Dokumenten wird der onload Handler aufgerufen.

Anmerkung: Wenn dies gesetzt ist, werden onload und andere Event Handler nicht zurückgesetzt, nachdem das erste XML Dokument geladen ist, und der onload Handler wird nach Erhalt jedes Teils der Antwort aufgerufen.

Konstruktor

XMLHttpRequest()

Der Konstruktor initiiert ein XMLHttpRequest Objekt. Er muss vor allen anderen Methoden aufgerufen werden.

Gecko/Firefox 16 fügt einen nicht-standard Parameter zum Konstruktor hinzu, der den anonymen Modus einschalten kann (siehe Bug 692677). Das mozAnon flag auf true zu setzen, hat einen ähnlichen Effekt wie der AnonXMLHttpRequest() Konstruktor, der in der XMLHttpRequest Spezifikation beschrieben ist, aber noch in keinem Browser implementiert wurde (Stand September 2012).

XMLHttpRequest (
  JSObject objParameters
);
Parameter (nicht-standard)
objParameters {{ gecko_minversion_inline("16.0") }}
Es gibt zwei Flags, die gesetzt werden können:
mozAnon
Boolean: Wenn dieses Flag auf true gesetzt ist, wird der Browser weder den Ursprung der Anfrage noch Anmeldedaten übermitteln, wenn er Daten anfordert. Das heisst vor allem auch, dass keine Cookies gesendet werden, sofern sie nicht ausdrücklich mit setRequestHeader hinzugefügt wurden.
mozSystem
Boolean: Dieses Flag auf true zu setzen, ermöglicht das Herstellen von Cross-Site Verbindungen, ohne dass der Server dem mittels CORS zustimmen muss. Erfodert das Setzen von mozAnon: true. D.h. das kann nicht mit dem Senden von Cookies oder anderen Anmeldeinformationen kombiniert werden. Dies funktioniert nur in privilegierten (reviewed) Apps; es klappt nicht auf beliebigen Webseiten, die in Firefox geladen werden.

Methoden

abort()

Bricht die Anfrage ab, falls sie bereits gesendet wurde.

getAllResponseHeaders()

DOMString getAllResponseHeaders();

Liefert alle Antwort-Header als String, oder null falls keine Antwort empfangen wurde.

Anmerkung: Für mehrteilige Anfragen gibt dies die Header des aktuellen Teils der Anfrage zurück, nicht die des ursprünglichen Kanals.

getResponseHeader()

DOMString? getResponseHeader(DOMString header);

Liefert den String mit dem Text des angegebenen Headers, oder null falls die Antwort noch nicht empfangen wurde oder der Header in der Antwort nicht existiert.

open()

Initialisiert eine Anfrage. Diese Methode ist nur zur Verwendung in JavaScript Code; um eine Anfrage aus nativem Code zu initialisieren, ist stattdessen openRequest() zu benutzen.

Anmerkung: Der Aufruf dieser Methode für eine bereits aktive Anfrage (eine, für die open()oder openRequest() schon ausgeführt wurde) ist gleichwertig mit  dem Aufruf von abort().
void open(
   DOMString method,
   DOMString url,
   optional boolean async,
   optional DOMString user,
   optional DOMString password
);
Parameter
method
Die zu benutzende HTTP Methode,  wie "GET", "POST", "PUT", "DELETE", etc. Wird für nicht-HTTP(S) URLs ignoriert.
url
Der URL, an den die Anfrage geschickt werden soll.
async
Ein optionaler boole'scher Parameter mit Defaultwert true, der angibt, ob die Operation asynchron ausgeführt werden soll. Wenn dieser Wert false ist, kehrt die send()Methode nicht zurück, bis die Antwort vollständig empfangen worden ist. Ist er true, kehrt sie sofort zurück, und die Benachrichtigung über die vollendete Transaktion erfolgt mittels Events. Dies muss true sein falls das multipart Attribut true ist, sonst wird ein Fehler ausgelöst.
user
Der optionale Benutzername zum Zweck der Authentisierung; ohne Angabe ist dies ein leerer String.
password
Das optionale Passwort zum Zweck der Authentisierung; ohne Angabe ist dies ein leerer String.

overrideMimeType()

Übergeht den vom Server zurückgegebenen MIME Typ. Dies kann beispielsweise benutzt werden, um zu erzwingen, dass ein Stream als text/xml behandelt und geparst wird, selbst wenn ihn der Server nicht als das meldet. Diese Methode muss vor send() aufgerufen werden.

void overrideMimeType(DOMString mimetype);

send()

Sendet die Anfrage. Falls die Anfage asynchron ist (was der Default ist), kehrt diese Methode zurück, sobald die Anfrage gesendet ist. Ist die Anfrage synchron, kehrt diese Methode nicht zurück, bis die Antwort angekommen (oder ein Timeout aufgetreten) ist.

Anmerkung: Jegliche zu setzende Event Handler müssen vor dem Aufruf von send() gesetzt werden.
void send();
void send(ArrayBuffer data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
Anmerkungen

Falls data ein Document ist, so wird dieses vor dem Senden serialisiert. Beim Senden eines Document senden Firefox Versionen vor Version 3 die Anfrage immer encodiert als UTF-8; Firefox 3 sendet das Document richtigerweise mit dem angegebenen body.xmlEncoding, oder UTF-8 falls keines angegeben wurde.

Falls es ein nsIInputStream ist, muss er kompatibel sein mit der setUploadStream()Methode des nsIUploadChannel. In diesem Fall wird die Länge des Inhalts in einem Content-Length Header zur Anfrage hinzugefügt, dessen Wert mit der available()Methode des nsIInputStream ermittelt wird. Jegliche Header, die am Anfang des Streams enthalten sind, werden als Teil des Nachrichtenkörpers behandelt. Der MIME Typ des Streams sollte vor dem Aufruf von send() angegeben werden, indem der Content-Type Header mit der  setRequestHeader() Methode gesetzt wird.

Der beste Weg, um binäre Inhalte zu senden (wie beim Hochladen einer Datei), ist die Verwendung von ArrayBuffern oder Blobs in Verbindung mit der send() Methode. Wenn jedoch stringifizierbare Rohdaten gesendet werden sollen, ist die sendAsBinary() Methode zu verwenden.

setRequestHeader()

Setzt den Wert eines HTTP Anfrage-Headers. Aufrufe von setRequestHeader() müssen nach open(), aber vor send() erfolgen.

void setRequestHeader(
   DOMString header,
   DOMString value
);
Parameter
header
Der Name des zu setzenden Headers.
value
Der Wert des zu setzenden Headers.

Nicht-Standard Methoden

init()

Initialisiert das Objekt für die Verwendung aus C++ Code.

Warnung: Diese Methode darf nicht aus JavaScript heraus aufgerufen werden.
[noscript] void init(
   in nsIPrincipal principal,
   in nsIScriptContext scriptContext,
   in nsPIDOMWindow ownerWindow
);
Parameter
principal
Das Prinzipal, das für die Anfrage benutzt werden soll; darf nicht null sein.
scriptContext
Der Skript-Kontext, der für die Anfrage benutzt werden soll; darf nicht null sein.
ownerWindow
Das Fenster, das zu der Anfrage gehört; darf null sein.

openRequest()

Initialisiert eine Anfrage. Diese Methode ist zur Verwendung in nativem Code; um eine Anfrage in JavaScript Code zu initialisieren, ist stattdessen open() zu verwenden. Siehe Dokumentation für open().

{{ method_gecko_minversion("sendAsBinary", "1.9") }}

Eine Variante der send() Methode, die binäre Daten schickt.

void sendAsBinary(
   in DOMString body
);

Diese Methode, zusammen mit der readAsBinaryString Methode der FileReader API, ermöglichen das Lesen und den Upload jeglicher Dateitypen und das Stringifizieren der Rohdaten.

Parameter
body
Der Körper der Anfrage als DOMstring. Diese Daten werden durch Beschneiden (Entfernen des höherwertigen Bytes jedes Zeichens) in Einzel-Byte-Zeichen umgewandelt.
sendAsBinary() polyfill

Da sendAsBinary() ein experimentelles Feature ist, kommt hier ein Polyfill für Browser, die sendAsBinary() nicht unterstützen, dafür aber typisierte arrays.

/*\
|*|
|*|  :: XMLHttpRequest.prototype.sendAsBinary() Polifyll ::
|*|
|*|  https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#sendAsBinary()
|*|
\*/

if (!XMLHttpRequest.prototype.sendAsBinary) {
  XMLHttpRequest.prototype.sendAsBinary = function (sData) {
    var nBytes = sData.length, ui8Data = new Uint8Array(nBytes);
    for (var nIdx = 0; nIdx < nBytes; nIdx++) {
      ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff;
    }
    /* sende als ArrayBufferView...: */
    this.send(ui8Data);
    /* ...oder als ArrayBuffer (altmodisch)...: this.send(ui8Data.buffer); */
  };
}
Anmerkung: Dieses Polyfill kann mit zwei Datentypen als Argument für send() gebaut werden: einem ArrayBuffer (ui8Data.buffer – kommentierter Code) oder einer ArrayBufferView (ui8Data, das ist ein typisiertes Array von 8-bit Ganzzahlen ohne Vorzeichen – unkommentierter Code). Wenn man jedoch in Google Chrome versucht, einen ArrayBuffer zu senden, erscheint die folgende Warnmeldung: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead.

Anmerkungen

  • Standardmässig begrenzt Firefox 3 die Anzahl gleichzeitiger XMLHttpRequest Verbindungen pro Server auf 6 (frühere Versionen begrenzen dies auf 2 pro Server). Manche interaktiven Websites können eine XMLHttpRequest Verbindung offen halten, so dass das Öffnen mehrerer Sitzungen auf solchen Sites dazu führen kann, dass der Browser auf eine Art und Weise hängen bleibt, dass das Fenster nicht mehr neu gezeichnet wird und Steuerelemente nicht mehr reagieren. Dieser Wert lässt sich ändern durch Editieren der Voreinstellung network.http.max-persistent-connections-per-server in about:config.
  • Ab {{ gecko("7.0") }} werden Header, die durch {{ manch("setRequestHeader") }} gesetzt wurden, mit der Anfrage mitgeschickt, wenn einer Umleitung gefolgt wird. Zuvor wurden diese Header nicht gesendet.
  • XMLHttpRequest ist in Gecko implementiert mittels der {{ interface("nsIXMLHttpRequest") }}, {{ interface("nsIXMLHttpRequestEventTarget") }}, und {{ interface("nsIJSXMLHttpRequest") }} Schnittstellen.

Events

onreadystatechange als eine Eigenschaft der XMLHttpRequest Instanz wird von allen Browsern unterstützt.

Seither wurden einige zusätzliche Event Handler in verschiedenen Browsern implementiert (onload, onerror, onprogress, etc.). Diese werden in Firefox unterstützt. Für Genaueres, siehe {{ interface("nsIXMLHttpRequestEventTarget") }} und Using XMLHttpRequest.

Neuere Browser, inklusive Firefox, unterstützen das 'Horchen' nach XMLHttpRequest Ereignissen mittels der Standard addEventListener APIs zusätzlich zum Setzen von on* Eigenschaften auf eine Handler Funktion.

Browser Kompatibilität

{{ CompatibilityTable() }}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Grundsätzliche Unterstützung (XHR1) 1 1.0 5 (via ActiveXObject)
7 (XMLHttpRequest)
{{ CompatVersionUnknown() }} 1.2
send(ArrayBuffer) 9 9 {{ compatUnknown() }} 11.60 {{ compatUnknown() }}
send(Blob) 7 3.6 {{ compatUnknown() }} 12 {{ compatUnknown() }}
send(FormData) 6 4 {{ compatUnknown() }} 12 {{ compatUnknown() }}
sendAsBinary(DOMString) {{ compatNo() }} – benutze polyfill 1.9 {{ compatUnknown() }} {{ compatUnknown() }} {{ compatUnknown() }}
response 10 6 10 11.60 {{ compatUnknown() }}
responseType = 'arraybuffer' 10 6 10 11.60 {{ compatUnknown() }}
responseType = 'blob' 19 6 10 12 {{ compatUnknown() }}
responseType = 'document' 18 11 10 {{ CompatNo() }} {{ CompatNo() }}
responseType = 'json' {{ CompatNo() }} 10 {{ CompatNo() }} 12 {{ CompatNo() }}
Progress Events 7 3.5 10 12 {{ compatUnknown() }}
withCredentials 3 3.5 10 12 4
timeout {{ CompatNo() }} 12.0 8 {{ compatUnknown() }} {{ CompatNo() }}
responseType = 'moz-blob' {{ CompatNo() }} 12.0 {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}
Feature Android Chrome für Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Grundsätzliche Unterstützung {{ CompatUnknown() }} 0.16 {{ CompatVersionUnknown() }} {{ CompatUnknown() }} {{ CompatUnknown() }} {{ CompatUnknown() }}

Gecko Anmerkungen

Gecko 11.0 {{ geckoRelease("11.0") }} entfernte die Unterstützung für die Verwendung der responseType und withCredentials Attribute bei der Durchführung synchroner Anfragen. Der Versuch löst einen NS_ERROR_DOM_INVALID_ACCESS_ERR Fehler aus. Diese Änderung wurde dem W3C zur Standardisierung vorgeschlagen.

Gecko 12.0 {{ geckoRelease("12.0") }} und spätere unterstützen die Verwendung von XMLHttpRequest zum Lesen von data: URLs.

Siehe auch

{{ languages( { "es": "es/XMLHttpRequest", "fr": "fr/XMLHttpRequest", "it": "it/XMLHttpRequest", "ja": "ja/XMLHttpRequest", "ko": "ko/XMLHttpRequest", "pl": "pl/XMLHttpRequest", "zh-cn": "zh-cn/DOM/XMLHttpRequest" } ) }}

Quelltext der Version

<p><code>XMLHttpRequest</code> ist ein <a class="internal" href="/en/JavaScript" title="En/JavaScript">JavaScript</a> Objekt, das von Microsoft entwickelt und von Mozilla, Apple, and Google übernommen wurde. Es wird derzeit <a class="external" href="http://www.w3.org/TR/XMLHttpRequest/" title="http://www.w3.org/TR/XMLHttpRequest/">im W3C standardisiert</a>. Es bietet einen einfachen Weg, Daten von einem URL zu erhalten. Trotz seines Namens kann man mit <code>XMLHttpRequest</code> jede Art von Daten laden, nicht nur XML, und es unterstützt auch andere Protokolle als <a href="/en/HTTP" title="en/HTTP">HTTP</a> (inklusive <code>file</code> und <code>ftp</code>).</p>
<p>Eine Instanz von <code>XMLHttpRequest</code> erzeugt man ganz einfach so:</p>
<pre>
var myRequest = new XMLHttpRequest();
</pre>
<p>Um mehr über den Umgang mit <code>XMLHttpRequest</code> zu erfahren, siehe <a class="internal" href="/en/DOM/XMLHttpRequest/Using_XMLHttpRequest" title="En/Using XMLHttpRequest">Using XMLHttpRequest</a>.</p>
<h2 id="Method_overview">Übersicht: Methoden</h2>
<table class="standard-table">
  <tbody>
    <tr>
      <td><code><a class="internal" href="/en/DOM/XMLHttpRequest#XMLHttpRequest()" title="/en/DOM/XMLHttpRequest#XMLHttpRequest()">XMLHttpRequest</a>(JSObject objParameters);</code></td>
    </tr>
    <tr>
      <td><code>void <a class="internal" href="/en/DOM/XMLHttpRequest#abort()" title="en/DOM/XMLHttpRequest#abort()">abort</a>();</code></td>
    </tr>
    <tr>
      <td><code>DOMString <a class="internal" href="/en/DOM/XMLHttpRequest#getAllResponseHeaders()" title="en/DOM/XMLHttpRequest#getAllResponseHeaders()">getAllResponseHeaders</a>();</code></td>
    </tr>
    <tr>
      <td><code>DOMString? <a class="internal" href="/en/DOM/XMLHttpRequest#getResponseHeader()" title="en/DOM/XMLHttpRequest#getResponseHeader()">getResponseHeader</a>(DOMString header);</code></td>
    </tr>
    <tr>
      <td><code>void <a class="internal" href="/en/DOM/XMLHttpRequest#open()" title="en/DOM/XMLHttpRequest#open()">open</a>(DOMString method, DOMString url, optional boolean async, optional DOMString? user, optional DOMString? password);</code></td>
    </tr>
    <tr>
      <td><code>void <a class="internal" href="/en/DOM/XMLHttpRequest#overrideMimeType()" title="en/DOM/XMLHttpRequest#overrideMimeType()">overrideMimeType</a>(DOMString mime);</code></td>
    </tr>
    <tr>
      <td><code>void <a class="internal" href="/en/DOM/XMLHttpRequest#send()" title="en/DOM/XMLHttpRequest#send()">send</a>();</code><br />
        <code>void <a class="internal" href="/en/DOM/XMLHttpRequest#send()" title="en/DOM/XMLHttpRequest#send()">send</a>(ArrayBuffer data);</code><br />
        <code>void <a class="internal" href="/en/DOM/XMLHttpRequest#send()" title="en/DOM/XMLHttpRequest#send()">send</a>(Blob data);</code><br />
        <code>void <a class="internal" href="/en/DOM/XMLHttpRequest#send()" title="en/DOM/XMLHttpRequest#send()">send</a>(Document data);</code><br />
        <code>void <a class="internal" href="/en/DOM/XMLHttpRequest#send()" title="en/DOM/XMLHttpRequest#send()">send</a>(DOMString? data);</code><br />
        <code>void <a class="internal" href="/en/DOM/XMLHttpRequest#send()" title="en/DOM/XMLHttpRequest#send()">send</a>(FormData data);</code></td>
    </tr>
    <tr>
      <td><code>void <a class="internal" href="/en/DOM/XMLHttpRequest#setRequestHeader()" title="en/DOM/XMLHttpRequest#setRequestHeader()">setRequestHeader</a>(DOMString header, DOMString value);</code></td>
    </tr>
    <tr>
      <th>Nicht-Standard Methoden</th>
    </tr>
    <tr>
      <td><code>[noscript] void <a class="internal" href="/en/DOM/XMLHttpRequest#init()" title="en/DOM/XMLHttpRequest#init()">init</a>(in nsIPrincipal principal, in nsIScriptContext scriptContext, in nsPIDOMWindow ownerWindow);</code></td>
    </tr>
    <tr>
      <td><code>[noscript] void <a class="internal" href="/en/DOM/XMLHttpRequest#openRequest()" title="en/DOM/XMLHttpRequest#openRequest()">openRequest</a>(in AUTF8String method, in AUTF8String url, in boolean async, in AString user, in AString password); </code></td>
    </tr>
    <tr>
      <td><code>void <a class="internal" href="/en/DOM/XMLHttpRequest#sendAsBinary()" title="en/DOM/XMLHttpRequest#sendAsBinary()">sendAsBinary</a>(in DOMString body);</code></td>
    </tr>
  </tbody>
</table>
<h2 id="Properties">Eigenschaften</h2>
<table class="standard-table">
  <tbody>
    <tr>
      <th>Attribut</th>
      <th>Typ</th>
      <th>Beschreibung</th>
    </tr>
    <tr id="onreadystatechange">
      <td>
        <p><code>onreadystatechange</code></p>
      </td>
      <td><code>Function?</code></td>
      <td>
        <p>Ein JavaScript function Objekt, das bei jedem Wechsel des <code>readyState</code> Attributs aufgerufen wird. Das Callback wird aus dem Thread der Benutzerschnittstelle aufgerufen.</p>
        <div class="warning">
          <strong>Warnung:</strong> Dies <em>sollte</em> nicht mit synchronen Anfragen und <em>darf</em> nicht aus nativem Code heraus verwendet werden.</div>
      </td>
    </tr>
    <tr id="readyState">
      <td><code>readyState</code></td>
      <td><code>unsigned short</code></td>
      <td>
        <p>Der Status der Anfrage:</p>
        <table class="standard-table">
          <tbody>
            <tr>
              <td class="header">Wert</td>
              <td class="header">Status</td>
              <td class="header">Beschreibung</td>
            </tr>
            <tr>
              <td><code>0</code></td>
              <td><code>UNSENT</code></td>
              <td><code>open()</code>wurde noch nicht aufgerufen.</td>
            </tr>
            <tr>
              <td><code>1</code></td>
              <td><code>OPENED</code></td>
              <td><code>send()</code>wurde noch nicht aufgerufen.</td>
            </tr>
            <tr>
              <td><code>2</code></td>
              <td><code>HEADERS_RECEIVED</code></td>
              <td><code>send()</code> wurde aufgerufen, und Headers sowie Status sind verfügbar.</td>
            </tr>
            <tr>
              <td><code>3</code></td>
              <td><code>LOADING</code></td>
              <td>Download ist im Gange; <code>responseText</code> enthält bereits unvollständige Daten.</td>
            </tr>
            <tr>
              <td><code>4</code></td>
              <td><code>DONE</code></td>
              <td>Der Vorgang ist abgeschlossen.</td>
            </tr>
          </tbody>
        </table>
      </td>
    </tr>
    <tr id="response">
      <td><code>response</code></td>
      <td>variiert</td>
      <td>
        <p>Der Entitätskörper der Antwort (response entity body) gemäss <code><a href="#responseType">responseType</a></code>, als ein <a href="/en/JavaScript_typed_arrays/ArrayBuffer" title="en/JavaScript typed arrays/ArrayBuffer"><code>ArrayBuffer</code></a>, <a href="/en/DOM/Blob" title="en/DOM/Blob"><code>Blob</code></a>, {{ domxref("Document") }}, JavaScript Objekt (für "json"), oder string. Dies ist <code>null</code> falls die Anfrage nicht abgeschlossen ist oder erfolglos war.</p>
      </td>
    </tr>
    <tr id="responseText">
      <td><code>responseText</code> {{ReadOnlyInline()}}</td>
      <td><code>DOMString</code></td>
      <td>Die Antwort auf die Anfrage als Text, oder <code>null</code> falls die Anfrage nicht abgeschlossen ist oder erfolglos war.</td>
    </tr>
    <tr id="responseType">
      <td><code>responseType</code></td>
      <td><code>XMLHttpRequestResponseType</code></td>
      <td>
        <p>Kann gesetzt werden, um den Datentyp der Antwort zu ändern.</p>
        <table class="standard-table" style="width: auto;">
          <tbody>
            <tr>
              <td class="header">Wert</td>
              <td class="header">Datentyp der <code>response</code> Eigenschaft</td>
            </tr>
            <tr>
              <td><code>""</code> (leerer String)</td>
              <td>String (Das ist der Default)</td>
            </tr>
            <tr>
              <td><code>"arraybuffer"</code></td>
              <td><a href="/en/JavaScript_typed_arrays/ArrayBuffer" title="en/JavaScript typed arrays/ArrayBuffer"><code>ArrayBuffer</code></a></td>
            </tr>
            <tr>
              <td><code>"blob"</code></td>
              <td>{{ domxref("Blob") }}</td>
            </tr>
            <tr>
              <td><code>"document"</code></td>
              <td>{{ domxref("Document") }}</td>
            </tr>
            <tr>
              <td><code>"json"</code></td>
              <td>JavaScript Objekt, geparsed aus einem JSON String, der vom Server zurückgegeben wird.</td>
            </tr>
            <tr>
              <td><code>"text"</code></td>
              <td>String</td>
            </tr>
            <tr>
              <td><code>"moz-blob"</code></td>
              <td>Wird von Firefox verwendet, um den Bezug partieller {{ domxref("Blob") }} Daten von <code>progress</code> Events zu erlauben. Dadurch kann ein <code>progress</code> Event Handler bereits mit der Verarbeitung von Daten beginnen, während ihr Empfang noch läuft. {{ gecko_minversion_inline("12.0") }}</td>
            </tr>
            <tr>
              <td><code>"moz-chunked-text"</code></td>
              <td>
                <p>Ähnlich wie <code>"text"</code>, aber streamt die Daten. Das bedeutet, dass der Wert in <code>response</code> nur während des <code>"progress"</code> Event verfügbar ist und jeweils nur die Daten enthält, die seit dem letzten <code>"progress"</code> Event eingetroffen sind.</p>
                <p>Wenn auf <code>response</code> während eines <code>"progress"</code> Events zugegriffen wird, enthält es einen String mit den Daten. Andernfalls gibt es <code>null</code> zurück.</p>
                <p>Dieser Modus funktioniert derzeit nur in Firefox. {{ gecko_minversion_inline("9.0") }}</p>
              </td>
            </tr>
            <tr>
              <td><code>"moz-chunked-arraybuffer"</code></td>
              <td>
                <p>Ähnlich wie <code>"arraybuffer"</code>, aber streamt die Daten. Das bedeutet, dass der Wert in <code>response</code> nur während des <code>"progress"</code> Event verfügbar ist und jeweils nur die Daten enthält, die seit dem letzten <code>"progress"</code> Event eingetroffen sind.</p>
                <p>Wenn auf <code>response</code> während eines <code>"progress"</code> Events zugegriffen wird, enthält es einen <code>ArrayBuffer</code> mit den Daten. Andernfalls gibt es <code>null</code> zurück.</p>
                <p>Dieser Modus funktioniert derzeit nur in Firefox. {{ gecko_minversion_inline("9.0") }}</p>
              </td>
            </tr>
          </tbody>
        </table>
        <div class="note">
          <strong>Anmerkung:</strong> Ab Gecko 11.0 {{ geckoRelease("11.0") }} sowie WebKit build 528 kann man in diesen Browsern das <code>responseType</code> Attribut nicht mehr für synchrone Anfragen benutzen. Der Versuch löst einen <code>NS_ERROR_DOM_INVALID_ACCESS_ERR</code> Fehler aus. Diese Änderung wurde dem W3C zur Standardisierung vorgeschlagen.</div>
      </td>
    </tr>
    <tr id="responseXML">
      <td><code>responseXML</code> {{ReadOnlyInline()}}</td>
      <td><code>Document?</code></td>
      <td>
        <p>Die Antwort auf die Anfrage als DOM <code><a class="internal" href="/en/DOM/document" title="En/DOM/Document">Document</a></code> Objekt, oder <code>null</code> falls die Anfrage erfolglos war, noch nicht gesendet wurde, oder nicht als XML oder HTML geparst werden kann. Die Antwort wird geparst, als wäre sie ein <code>text/xml</code> Stream. Wenn der <code>responseType</code> auf <code>"document"</code> gesetzt wurde und die Anfrage asynchron gemacht wurde, wird die Antwort geparst, als wäre sie ein <code>text/html</code> Stream.</p>
        <div class="note">
          <strong>Anmerkung:</strong> Falls der Server nicht den <code>text/xml</code> Inhaltstyp-Header auf die Antwort anwendet, kann man<code> overrideMimeType()</code> verwenden, um <code>XMLHttpRequest</code> zu zwingen, sie dennoch als XML zu parsen.</div>
      </td>
    </tr>
    <tr id="status">
      <td><code>status</code> {{ReadOnlyInline()}}</td>
      <td><code>unsigned short</code></td>
      <td>Der Status der Antwort auf die Anfrage. Das ist der HTTP Ergebnis-Code (<code>status</code> ist z.B. 200 für eine erfolgreiche Anfrage).</td>
    </tr>
    <tr id="statusText">
      <td><code>statusText</code> {{ReadOnlyInline()}}</td>
      <td><code>DOMString</code></td>
      <td>Der Antwort-String, der vom HTTP Server zurückgesendet wurde. Im Gegensatz zu <code>status</code> beinhaltet dies den ganzen Text der Antwortnachricht (z.B. "<code>200 OK</code>").</td>
    </tr>
    <tr id="timeout">
      <td><code>timeout</code></td>
      <td><code>unsigned long</code></td>
      <td>
        <p>Die Anzahl Millisekunden, die eine Anfrage dauern darf, bevor sie automatisch abgebrochen wird. Ein Wert von 0 (das ist die Voreinstellung) bedeutet, dass es kein timeout gibt. {{ gecko_minversion_inline("12.0") }}</p>
        <div class="note">
          <strong>Anmerkung:</strong> Für synchrone Anfragen mit einem besitzenden Fenster darf man kein timeout verwenden.</div>
      </td>
    </tr>
    <tr id="upload">
      <td><code>upload</code></td>
      <td><code>XMLHttpRequestUpload</code></td>
      <td>Das Hochladen kann mitverfolgt werden, indem man einen Event Handler zu <code>upload</code> hinzufügt.</td>
    </tr>
    <tr id="withCredentials">
      <td><code>withCredentials</code></td>
      <td><code>boolean</code></td>
      <td>
        <p>Zeigt an, ob Site-übergreifende <code>Access-Control</code> Anfragen mit Credentials wie Cookies oder Autorisierungs-Headers durchgeführt werden sollen oder nicht. Die Voreinstellung ist <code>false</code>.</p>
        <div class="note">
          <strong>Anmerkung:</strong> Anfragen an die ursprüngliche Site sind davon niemals betroffen.</div>
        <div class="note">
          <strong>Anmerkung:</strong> Ab Gecko 11.0 {{ geckoRelease("11.0") }} kann man das <code>withCredentials</code> Attribut nicht mehr für synchrone Anfragen verwenden. Der Versuch löst einen <code>NS_ERROR_DOM_INVALID_ACCESS_ERR</code> Fehler aus.</div>
      </td>
    </tr>
  </tbody>
</table>
<h3 id="Non-standard_properties">Nicht-Standard Eigenschaften</h3>
<table class="standard-table">
  <tbody>
    <tr>
      <th>Attribut</th>
      <th>Typ</th>
      <th>Description</th>
    </tr>
    <tr id="channel">
      <td><code>channel</code> {{ReadOnlyInline()}}</td>
      <td>{{Interface("nsIChannel")}}</td>
      <td>Der Kanal, der vom Objekt zur Durchführung der Anfrage verwendet wurde. Das ist <code>null</code> falls der Kanal noch nicht erzeugt worden ist. Im Falle von mehrteiligen Anfragen ist das der anfängliche Kanal, nicht derjenige der anderen Teile der mehrteiligen Anfrage.<br />
        <strong>Zugriff nur mit erhöhten Rechten.</strong></td>
    </tr>
    <tr id="mozAnon">
      <td><code>mozAnon</code> {{ReadOnlyInline()}}</td>
      <td><code>boolean</code></td>
      <td>
        <p>Falls <code>true</code> wird die Anfrage ohne Cookie und Authentisierungs-Headers gesendet.</p>
      </td>
    </tr>
    <tr id="mozSystem">
      <td><code>mozSystem</code> {{ReadOnlyInline()}}</td>
      <td><code>boolean</code></td>
      <td>
        <p>Falls <code>true</code> wird die Regel, die nur Anfragen zum gleichen Ursprung erlaubt, für diese Anfrage nicht durchgesetzt.</p>
      </td>
    </tr>
    <tr id="mozBackgroundRequest">
      <td><code>mozBackgroundRequest</code></td>
      <td><code>boolean</code></td>
      <td>
        <p>Zeigt an, ob das Objekt eine Service-Anfrage im Hintergrund darstellt. Falls <code>true</code> wird keine Lastgruppe mit der Anfrage verknüpft, und die Anzeige von Sicherheits-Dialogen wird verhindert. <strong>Zugriff nur mit erhöhten Rechten.</strong></p>
        <p>In Fällen, wo normalerweise ein Sicherheits-Dialog angezeigt würde (wie Autorisierungs- oder Zertifikatsfehler-Benachrichtigungen), schlägt die Anfrage stattdessen einfach fehl.</p>
        <div class="note">
          <strong>Anmerkung: </strong>Diese Eigenschaft muss vor dem Aufrufen von <code>open()</code> gesetzt werden..</div>
      </td>
    </tr>
    <tr id="mozResponseArrayBuffer">
      <td><code>mozResponseArrayBuffer</code> {{ gecko_minversion_inline("2.0") }} {{ obsolete_inline("6") }} {{ReadOnlyInline()}}</td>
      <td><a href="/en/JavaScript_typed_arrays/ArrayBuffer" title="en/JavaScript typed arrays/ArrayBuffer"><code>ArrayBuffer</code></a></td>
      <td>Die Antwort auf die Anfrage, als typisiertes JavaSript Array. Dies ist <code>NULL</code> falls die Anfrage erfolglos war oder noch nicht gesendet wurde.</td>
    </tr>
    <tr id="multipart">
      <td><code>multipart</code> {{ obsolete_inline("22") }}</td>
      <td><code>boolean</code></td>
      <td>
        <p><strong>Dieses nur in Gecko verfügbare Feature wurde in Firefox/Gecko 22 entfernt.</strong> Bitte verwende stattdessen <a href="/en-US/docs/Server-sent_events" title="/en-US/docs/Server-sent_events">Server-Sent Events</a>, <a href="/en-US/docs/WebSockets" title="/en-US/docs/WebSockets">Web Sockets</a> oder <code>responseText</code> aus <code>progress </code>Events.</p>
        <p>Zeigt an, ob als Antwort ein Stream von möglicherweise mehreren XML Dokumenten erwartet wird. Wird dies auf <code>true</code> gesetzt, muss der Inhaltstyp des ersten Teils der Antwort <code>multipart/x-mixed-replace</code> sein, sonst tritt ein Fehler auf. Alle Anfragen müssen asynchron sein.</p>
        <p>Dies ermöglicht die Unterstützung von Server Push; für jedes XML Dokument, das in die Antwort auf diese Anfrage geschrieben wird, wird ein neues XML DOM Dokument erzeugt, und zwischen den Dokumenten wird der <code>onload</code> Handler aufgerufen.</p>
        <div class="note">
          <strong>Anmerkung:</strong> Wenn dies gesetzt ist, werden <code>onload</code> und andere Event Handler nicht zurückgesetzt, nachdem das erste XML Dokument geladen ist, und der <code>onload</code> Handler wird nach Erhalt jedes Teils der Antwort aufgerufen.</div>
      </td>
    </tr>
  </tbody>
</table>
<h2 id="Constructor">Konstruktor</h2>
<h3 id="XMLHttpRequest()" name="XMLHttpRequest()">XMLHttpRequest()</h3>
<p>Der Konstruktor initiiert ein <code>XMLHttpRequest</code> Objekt. Er muss vor allen anderen Methoden aufgerufen werden.</p>
<p>Gecko/Firefox 16 fügt einen nicht-standard Parameter zum Konstruktor hinzu, der den anonymen Modus einschalten kann (siehe <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=692677" title="692677 – Relax same-origin XHR restrictions for privileged applications">Bug 692677</a>). Das <code>mozAnon</code> flag auf <code>true</code> zu setzen, hat einen ähnlichen Effekt wie der <a href="http://www.w3.org/TR/2012/WD-XMLHttpRequest-20120117/#dom-anonxmlhttprequest" title="see AnonXMLHttpRequest in the XMLHttpRequest specification"><code>AnonXMLHttpRequest()</code></a> Konstruktor, der in der XMLHttpRequest Spezifikation beschrieben ist, aber noch in keinem Browser implementiert wurde (Stand September 2012).</p>
<pre>
XMLHttpRequest (
  JSObject objParameters
);</pre>
<h5 id="Parameters_(non-standard)">Parameter (nicht-standard)</h5>
<dl>
  <dt>
    <code>objParameters</code> {{ gecko_minversion_inline("16.0") }}</dt>
  <dd>
    Es gibt zwei Flags, die gesetzt werden können:
    <dl>
      <dt>
        <code>mozAnon</code></dt>
      <dd>
        Boolean: Wenn dieses Flag auf <code>true</code> gesetzt ist, wird der Browser weder den Ursprung der Anfrage noch <a href="http://www.w3.org/TR/2012/WD-XMLHttpRequest-20120117/#user-credentials" title="Defintion of “User credentials” in the XMLHttpRequest specification.">Anmeldedaten</a> übermitteln, wenn er Daten anfordert. Das heisst vor allem auch, dass keine Cookies gesendet werden, sofern sie nicht ausdrücklich mit setRequestHeader hinzugefügt wurden.</dd>
      <dt>
        <code>mozSystem</code></dt>
      <dd>
        Boolean: Dieses Flag auf <code>true</code> zu setzen, ermöglicht das Herstellen von Cross-Site Verbindungen, ohne dass der Server dem mittels CORS zustimmen muss. <em>Erfodert das Setzen von <code>mozAnon: true</code>. D.h. das kann nicht mit dem Senden von Cookies oder anderen Anmeldeinformationen kombiniert werden. Dies <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=692677#c68" title="Bug 692677 comment 68">funktioniert nur in privilegierten (reviewed) Apps</a>; es klappt nicht auf beliebigen Webseiten, die in Firefox geladen werden.</em></dd>
    </dl>
  </dd>
</dl>
<h2 id="Methods">Methoden</h2>
<h3 id="abort()" name="abort()">abort()</h3>
<p>Bricht die Anfrage ab, falls sie bereits gesendet wurde.</p>
<h3 id="getAllResponseHeaders()" name="getAllResponseHeaders()">getAllResponseHeaders()</h3>
<pre>
DOMString getAllResponseHeaders();</pre>
<p>Liefert alle Antwort-Header als String, oder <code>null</code> falls keine Antwort empfangen wurde.<strong> </strong></p>
<p><strong>Anmerkung:</strong> Für mehrteilige Anfragen gibt dies die Header des <em>aktuellen </em>Teils der Anfrage zurück, nicht die des ursprünglichen Kanals.</p>
<h3 id="getResponseHeader()" name="getResponseHeader()">getResponseHeader()</h3>
<pre>
DOMString? getResponseHeader(DOMString <var>header</var>);</pre>
<p>Liefert den String mit dem Text des angegebenen Headers, oder <code>null</code> falls die Antwort noch nicht empfangen wurde oder der Header in der Antwort nicht existiert.</p>
<h3 id="open()" name="open()">open()</h3>
<p>Initialisiert eine Anfrage. Diese Methode ist nur zur Verwendung in JavaScript Code; um eine Anfrage aus nativem Code zu initialisieren, ist stattdessen<code> </code><a class="internal" href="/en/nsIXMLHttpRequest#openRequest()" title="/en/XMLHttpRequest#openRequest()"><code>openRequest()</code></a> zu benutzen.</p>
<div class="note">
  <strong>Anmerkung:</strong> Der Aufruf dieser Methode für eine bereits aktive Anfrage (eine, für die <code>open()</code>oder <code>openRequest() </code>schon ausgeführt wurde) ist gleichwertig mit&nbsp; dem Aufruf von <code>abort()</code>.</div>
<pre>
void open(
   DOMString <var>method</var>,
   DOMString <var>url</var>,
   optional boolean <var>async</var>,
   optional DOMString <var>user</var>,
   optional DOMString <var>password</var>
);
</pre>
<h6 id="Parameters">Parameter</h6>
<dl>
  <dt>
    <code>method</code></dt>
  <dd>
    Die zu benutzende HTTP Methode,&nbsp; wie "GET", "POST", "PUT", "DELETE", etc. Wird für nicht-HTTP(S) URLs ignoriert.</dd>
  <dt>
    <code>url</code></dt>
  <dd>
    Der URL, an den die Anfrage geschickt werden soll.</dd>
  <dt>
    <code>async</code></dt>
  <dd>
    Ein optionaler boole'scher Parameter mit Defaultwert <code>true</code>, der angibt, ob die Operation asynchron ausgeführt werden soll. Wenn dieser Wert <code>false</code> ist, kehrt die <code>send()</code>Methode nicht zurück, bis die Antwort vollständig empfangen worden ist. Ist er <code>true</code>, kehrt sie sofort zurück, und die Benachrichtigung über die vollendete Transaktion erfolgt mittels Events. Dies <em>muss</em> <code>true</code> sein falls das <code>multipart</code> Attribut <code>true</code> ist, sonst wird ein Fehler ausgelöst.</dd>
  <dt>
    <code>user</code></dt>
  <dd>
    Der optionale Benutzername zum Zweck der Authentisierung; ohne Angabe ist dies ein leerer String.</dd>
  <dt>
    <code>password</code></dt>
  <dd>
    Das optionale Passwort zum Zweck der Authentisierung; ohne Angabe ist dies ein leerer String.</dd>
</dl>
<h3 id="overrideMimeType()" name="overrideMimeType()">overrideMimeType()</h3>
<p>Übergeht den vom Server zurückgegebenen MIME Typ. Dies kann beispielsweise benutzt werden, um zu erzwingen, dass ein Stream als text/xml behandelt und geparst wird, selbst wenn ihn der Server nicht als das meldet. Diese Methode muss vor <code>send()</code> aufgerufen werden.</p>
<pre>
void overrideMimeType(DOMString <var>mimetype</var>);</pre>
<h3 id="send()" name="send()">send()</h3>
<p>Sendet die Anfrage. Falls die Anfage asynchron ist (was der Default ist), kehrt diese Methode zurück, sobald die Anfrage gesendet ist. Ist die Anfrage synchron, kehrt diese Methode nicht zurück, bis die Antwort angekommen (oder ein Timeout aufgetreten) ist.</p>
<div class="note">
  <strong>Anmerkung:</strong> Jegliche zu setzende Event Handler müssen vor dem Aufruf von <code>send()</code> gesetzt werden.</div>
<pre>
void send();
void send(ArrayBuffer <var>data</var>);
void send(Blob <var>data</var>);
void send(Document <var>data</var>);
void send(DOMString? <var>data</var>);
void send(FormData <var>data</var>);</pre>
<h6 id="Notes">Anmerkungen</h6>
<p>Falls <em>data</em> ein <code>Document</code> ist, so wird dieses vor dem Senden serialisiert. Beim Senden eines <code>Document</code> senden Firefox Versionen vor Version 3 die Anfrage immer encodiert als UTF-8; <a href="/en/Firefox_3" rel="internal" title="en/Firefox_3">Firefox 3</a> sendet das <code>Document</code> richtigerweise mit dem angegebenen <code>body.xmlEncoding</code>, oder UTF-8 falls keines angegeben wurde.</p>
<p>Falls es ein <code>nsIInputStream</code> ist, muss er kompatibel sein mit der&nbsp;<code>setUploadStream()</code>Methode des <code>nsIUploadChannel</code>. In diesem Fall wird die Länge des Inhalts in einem Content-Length Header zur Anfrage hinzugefügt, dessen Wert mit der&nbsp;<code>available()</code>Methode des <code>nsIInputStream</code> ermittelt wird. Jegliche Header, die am Anfang des Streams enthalten sind, werden als Teil des Nachrichtenkörpers behandelt. Der MIME Typ des Streams sollte vor dem Aufruf von <code>send()</code> angegeben werden, indem der Content-Type Header mit der&nbsp; <a class="internal" href="/en/nsIXMLHttpRequest#setRequestHeader()" title="/en/XMLHttpRequest#setRequestHeader()"><code>setRequestHeader()</code></a> Methode gesetzt wird.</p>
<p>Der beste Weg, um binäre Inhalte zu senden (wie beim Hochladen einer Datei), ist die Verwendung von <a href="/en-US/docs/JavaScript/Typed_arrays/ArrayBuffer" title="/en-US/docs/JavaScript/Typed_arrays/ArrayBuffer">ArrayBuffern</a> oder <a href="/en-US/docs/DOM/Blob" title="/en-US/docs/DOM/Blob">Blobs</a> in Verbindung mit der <code>send()</code> Methode. Wenn jedoch <a href="/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify" title="/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify">stringifizierbare</a> Rohdaten gesendet werden sollen, ist die <a href="/en-US/docs/DOM/XMLHttpRequest#sendAsBinary()" title="/en-US/docs/DOM/XMLHttpRequest#sendAsBinary()"><code>sendAsBinary()</code></a> Methode zu verwenden.</p>
<h3 id="setRequestHeader()" name="setRequestHeader()">setRequestHeader()</h3>
<p>Setzt den Wert eines HTTP Anfrage-Headers. Aufrufe von <code>setRequestHeader()</code> müssen nach <a href="#open"><code>open()</code></a>, aber vor <code>send()</code> erfolgen.</p>
<pre>
void setRequestHeader(
   DOMString <var>header</var>,
   DOMString <var>value</var>
);
</pre>
<h6 id="Parameters">Parameter</h6>
<dl>
  <dt>
    <code>header</code></dt>
  <dd>
    Der Name des zu setzenden Headers.</dd>
  <dt>
    <code>value</code></dt>
  <dd>
    Der Wert des zu setzenden Headers.</dd>
</dl>
<h3 id="Non-standard_methods">Nicht-Standard Methoden</h3>
<h4 id="init()">init()</h4>
<p>Initialisiert das Objekt für die Verwendung aus C++ Code.</p>
<div class="warning">
  <strong>Warnung:</strong> Diese Methode darf <em>nicht</em> aus JavaScript heraus aufgerufen werden.</div>
<pre>
[noscript] void init(
   in nsIPrincipal principal,
   in nsIScriptContext scriptContext,
   in nsPIDOMWindow ownerWindow
);
</pre>
<h5 id="Parameters">Parameter</h5>
<dl>
  <dt>
    <code>principal</code></dt>
  <dd>
    Das Prinzipal, das für die Anfrage benutzt werden soll; darf nicht <code>null</code> sein.</dd>
  <dt>
    <code>scriptContext</code></dt>
  <dd>
    Der Skript-Kontext, der für die Anfrage benutzt werden soll; darf nicht <code>null</code> sein.</dd>
  <dt>
    <code>ownerWindow</code></dt>
  <dd>
    Das Fenster, das zu der Anfrage gehört; darf <code>null</code> sein.</dd>
</dl>
<h4 id="openRequest()">openRequest()</h4>
<p>Initialisiert eine Anfrage. Diese Methode ist zur Verwendung in nativem Code; um eine Anfrage in JavaScript Code zu initialisieren, ist stattdessen <a class="internal" href="/en/nsIXMLHttpRequest#open()" title="/en/XMLHttpRequest#open()"><code>open()</code></a> zu verwenden. Siehe Dokumentation für <code>open()</code>.</p>
<p>{{ method_gecko_minversion("sendAsBinary", "1.9") }}</p>
<p>Eine Variante der <code>send()</code> Methode, die binäre Daten schickt.</p>
<pre>
void sendAsBinary(
   in DOMString body
);
</pre>
<p>Diese Methode, zusammen mit der <a href="/en-US/docs/DOM/FileReader#readAsBinaryString()" title="/en-US/docs/DOM/FileReader#readAsBinaryString()"><code>readAsBinaryString</code></a> Methode der <a href="/en-US/docs/DOM/FileReader" title="/en-US/docs/DOM/FileReader"><code>FileReader</code></a> API, ermöglichen <a href="https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest#Submitting_forms_and_uploading_files" title="/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest#Submitting_forms_and_uploading_files">das Lesen und den <strong>Upload</strong> jeglicher Dateitypen</a> und das <a href="/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify" title="/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify">Stringifizieren</a> der Rohdaten.</p>
<h5 id="Parameters">Parameter</h5>
<dl>
  <dt>
    <code>body</code></dt>
  <dd>
    Der Körper der Anfrage als DOMstring. Diese Daten werden durch Beschneiden (Entfernen des höherwertigen Bytes jedes Zeichens) in Einzel-Byte-Zeichen umgewandelt.</dd>
</dl>
<h5 id="Compatibility"><code>sendAsBinary()</code> polyfill</h5>
<p>Da <code>sendAsBinary()</code> ein experimentelles Feature ist, kommt hier <strong>ein Polyfill</strong> für Browser, die <code>sendAsBinary()</code> <em>nicht </em>unterstützen, dafür aber <a href="/en-US/docs/JavaScript/Typed_arrays" title="/en-US/docs/JavaScript/Typed_arrays">typisierte arrays</a>.</p>
<pre class="brush: js">
/*\
|*|
|*|&nbsp; :: XMLHttpRequest.prototype.sendAsBinary() Polifyll ::
|*|
|*|&nbsp; https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#sendAsBinary()
|*|
\*/

if (!XMLHttpRequest.prototype.sendAsBinary) {
&nbsp; XMLHttpRequest.prototype.sendAsBinary = function (sData) {
&nbsp;&nbsp;&nbsp; var nBytes = sData.length, ui8Data = new Uint8Array(nBytes);
&nbsp;&nbsp;&nbsp; for (var nIdx = 0; nIdx &lt; nBytes; nIdx++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ui8Data[nIdx] = sData.charCodeAt(nIdx) &amp; 0xff;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; /* sende als ArrayBufferView...: */
    this.send(ui8Data);
&nbsp;&nbsp;&nbsp; /* ...oder als ArrayBuffer (altmodisch)...: this.send(ui8Data.buffer); */
&nbsp; };
}</pre>
<div class="note">
  <strong>Anmerkung:</strong> Dieses Polyfill kann mit zwei Datentypen als Argument für <code>send()</code> gebaut werden: einem <a href="/en-US/docs/JavaScript/Typed_arrays/ArrayBuffer" title="/en-US/docs/JavaScript/Typed_arrays/ArrayBuffer"><code>ArrayBuffer</code></a> (<code>ui8Data.buffer</code> – kommentierter Code) oder einer <a href="/en-US/docs/JavaScript/Typed_arrays/ArrayBufferView" title="/en-US/docs/JavaScript/Typed_arrays/ArrayBufferView"><code>ArrayBufferView</code></a> (<code>ui8Data</code>, das ist ein <a href="/en-US/docs/JavaScript/Typed_arrays/Uint8Array" title="/en-US/docs/JavaScript/Typed_arrays/Uint8Array">typisiertes Array von 8-bit Ganzzahlen ohne Vorzeichen</a> – unkommentierter Code). Wenn man jedoch in Google Chrome versucht, einen <code>ArrayBuffer</code> zu senden, erscheint die folgende Warnmeldung:&nbsp;<code>ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead.</code></div>
<h2 id="Notes">Anmerkungen</h2>
<ul>
  <li class="note">Standardmässig begrenzt Firefox 3 die Anzahl gleichzeitiger&nbsp;<code>XMLHttpRequest</code> Verbindungen pro Server auf 6 (frühere Versionen begrenzen dies auf 2 pro Server). Manche interaktiven Websites können eine <code>XMLHttpRequest</code> Verbindung offen halten, so dass das Öffnen mehrerer Sitzungen auf solchen Sites dazu führen kann, dass der Browser auf eine Art und Weise hängen bleibt, dass das Fenster nicht mehr neu gezeichnet wird und Steuerelemente nicht mehr reagieren. Dieser Wert lässt sich ändern durch Editieren der Voreinstellung <code>network.http.max-persistent-connections-per-server</code> in <code><a class="linkification-ext" href="/about:config" title="Linkification: about:config">about:config</a></code>.</li>
  <li class="note">Ab {{ gecko("7.0") }} werden Header, die durch {{ manch("setRequestHeader") }} gesetzt wurden, mit der Anfrage mitgeschickt, wenn einer Umleitung gefolgt wird. Zuvor wurden diese Header nicht gesendet.</li>
  <li class="note"><code>XMLHttpRequest</code> ist in Gecko implementiert mittels der {{ interface("nsIXMLHttpRequest") }}, {{ interface("nsIXMLHttpRequestEventTarget") }}, und {{ interface("nsIJSXMLHttpRequest") }} Schnittstellen.</li>
</ul>
<h4 class="note" id="Events">Events</h4>
<p><code>onreadystatechange</code> als eine Eigenschaft der <code>XMLHttpRequest</code> Instanz wird von allen Browsern unterstützt.</p>
<p>Seither wurden einige zusätzliche Event Handler in verschiedenen Browsern implementiert (<code>onload</code>, <code>onerror</code>, <code>onprogress</code>, etc.). Diese werden in Firefox unterstützt. Für Genaueres, siehe {{ interface("nsIXMLHttpRequestEventTarget") }} und <a href="/en/DOM/XMLHttpRequest/Using_XMLHttpRequest" title="En/XMLHttpRequest/Using_XMLHttpRequest">Using XMLHttpRequest</a>.</p>
<p>Neuere Browser, inklusive Firefox, unterstützen das 'Horchen' nach <code>XMLHttpRequest </code>Ereignissen mittels der Standard <code><a href="/en/DOM/element.addEventListener" title="element.addEventListener">addEventListener</a></code> APIs zusätzlich zum Setzen von <code>on*</code> Eigenschaften auf eine Handler Funktion.</p>
<h2 id="Browser_Compatibility" name="Browser_Compatibility">Browser Kompatibilität</h2>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
  <table class="compat-table">
    <tbody>
      <tr>
        <th>Feature</th>
        <th>Chrome</th>
        <th>Firefox (Gecko)</th>
        <th>Internet Explorer</th>
        <th>Opera</th>
        <th>Safari (WebKit)</th>
      </tr>
      <tr>
        <td>Grundsätzliche Unterstützung (XHR1)</td>
        <td>1</td>
        <td>1.0</td>
        <td>5 (via ActiveXObject)<br />
          7 (XMLHttpRequest)</td>
        <td>{{ CompatVersionUnknown() }}</td>
        <td>1.2</td>
      </tr>
      <tr>
        <td><code>send(ArrayBuffer)</code></td>
        <td>9</td>
        <td>9</td>
        <td>{{ compatUnknown() }}</td>
        <td>11.60</td>
        <td>{{ compatUnknown() }}</td>
      </tr>
      <tr>
        <td><code>send(Blob)</code></td>
        <td>7</td>
        <td>3.6</td>
        <td>{{ compatUnknown() }}</td>
        <td>12</td>
        <td>{{ compatUnknown() }}</td>
      </tr>
      <tr>
        <td><code>send(FormData)</code></td>
        <td>6</td>
        <td>4</td>
        <td>{{ compatUnknown() }}</td>
        <td>12</td>
        <td>{{ compatUnknown() }}</td>
      </tr>
      <tr>
        <td><code>sendAsBinary(DOMString)</code></td>
        <td>{{ compatNo() }} – benutze <a href="#sendAsBinary%28%29_polyfill" title="sendAsBinary() polyfill">polyfill</a></td>
        <td>1.9</td>
        <td>{{ compatUnknown() }}</td>
        <td>{{ compatUnknown() }}</td>
        <td>{{ compatUnknown() }}</td>
      </tr>
      <tr>
        <td><code>response</code></td>
        <td>10</td>
        <td>6</td>
        <td>10</td>
        <td>11.60</td>
        <td>{{ compatUnknown() }}</td>
      </tr>
      <tr>
        <td><code>responseType</code> = 'arraybuffer'</td>
        <td>10</td>
        <td>6</td>
        <td>10</td>
        <td>11.60</td>
        <td>{{ compatUnknown() }}</td>
      </tr>
      <tr>
        <td><code>responseType</code> = 'blob'</td>
        <td>19</td>
        <td>6</td>
        <td>10</td>
        <td>12</td>
        <td>{{ compatUnknown() }}</td>
      </tr>
      <tr>
        <td><code>responseType</code> = 'document'</td>
        <td>18</td>
        <td>11</td>
        <td>10</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
      <tr>
        <td><code>responseType</code> = 'json'</td>
        <td>{{ CompatNo() }}</td>
        <td>10</td>
        <td>{{ CompatNo() }}</td>
        <td>12</td>
        <td>{{ CompatNo() }}</td>
      </tr>
      <tr>
        <td>Progress Events</td>
        <td>7</td>
        <td>3.5</td>
        <td>10</td>
        <td>12</td>
        <td>{{ compatUnknown() }}</td>
      </tr>
      <tr>
        <td><code>withCredentials</code></td>
        <td>3</td>
        <td>3.5</td>
        <td>10</td>
        <td>12</td>
        <td>4</td>
      </tr>
      <tr>
        <td><code>timeout</code></td>
        <td>{{ CompatNo() }}</td>
        <td>12.0</td>
        <td>8</td>
        <td>{{ compatUnknown() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
      <tr>
        <td><code>responseType</code> = 'moz-blob'</td>
        <td>{{ CompatNo() }}</td>
        <td>12.0</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
    </tbody>
  </table>
</div>
<div id="compat-mobile">
  <table class="compat-table">
    <tbody>
      <tr>
        <th>Feature</th>
        <th>Android</th>
        <th>Chrome für Android</th>
        <th>Firefox Mobile (Gecko)</th>
        <th>IE&nbsp;Phone</th>
        <th>Opera Mobile</th>
        <th>Safari Mobile</th>
      </tr>
      <tr>
        <td>Grundsätzliche Unterstützung</td>
        <td>{{ CompatUnknown() }}</td>
        <td>0.16</td>
        <td>{{ CompatVersionUnknown() }}</td>
        <td>{{ CompatUnknown() }}</td>
        <td>{{ CompatUnknown() }}</td>
        <td>{{ CompatUnknown() }}</td>
      </tr>
    </tbody>
  </table>
</div>
<h3 id="Gecko_notes">Gecko Anmerkungen</h3>
<p>Gecko 11.0 {{ geckoRelease("11.0") }} entfernte die Unterstützung für die Verwendung der <code>responseType</code> und <code>withCredentials</code> Attribute bei der Durchführung synchroner Anfragen. Der Versuch löst einen <code>NS_ERROR_DOM_INVALID_ACCESS_ERR</code> Fehler aus. Diese Änderung wurde dem W3C zur Standardisierung vorgeschlagen.</p>
<p>Gecko 12.0 {{ geckoRelease("12.0") }} und spätere unterstützen die Verwendung von <code>XMLHttpRequest</code> zum Lesen von <a href="/en/data_URIs" title="en/data_URIs"><code>data:</code> URLs</a>.</p>
<h2 id="See_also">Siehe auch</h2>
<ul>
  <li>MDN Artikel über XMLHttpRequest:
    <ul>
      <li><a href="/en/AJAX/Getting_Started" title="en/AJAX/Getting_Started">AJAX - Getting Started</a></li>
      <li><a href="/en/DOM/XMLHttpRequest/Using_XMLHttpRequest" title="En/Using XMLHttpRequest">Using XMLHttpRequest</a></li>
      <li><a href="/en/HTML_in_XMLHttpRequest" title="en/HTML_in_XMLHttpRequest">HTML in XMLHttpRequest</a></li>
      <li><a href="/en/DOM/XMLHttpRequest/FormData" title="en/XMLHttpRequest/FormData"><code>FormData</code></a></li>
    </ul>
  </li>
  <li>XMLHttpRequest Referencen von W3C und Browserherstellern:
    <ul>
      <li><a class="external" href="http://www.w3.org/TR/XMLHttpRequest1/">W3C: XMLHttpRequest</a> (base features)</li>
      <li><a class="external" href="http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html" title="http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html">W3C: XMLHttpRequest</a> (latest editor's draft with extensions to the base functionality, formerly XMLHttpRequest Level 2)</li>
      <li><a class="external" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmobjxmlhttprequest.asp">Microsoft documentation</a></li>
      <li><a class="external" href="http://developer.apple.com/internet/webcontent/xmlhttpreq.html">Apple developers' reference</a></li>
    </ul>
  </li>
  <li><a class="external" href="http://jibbering.com/2002/4/httprequest.html">"Using the XMLHttpRequest Object" (jibbering.com)</a></li>
  <li><a class="external" href="http://www.peej.co.uk/articles/rich-user-experience.html">XMLHttpRequest - REST and the Rich User Experience</a></li>
  <li><a class="external" href="http://www.html5rocks.com/en/tutorials/file/xhr2/">HTML5 Rocks - New Tricks in XMLHttpRequest2</a></li>
</ul>
<p>{{ languages( { "es": "es/XMLHttpRequest", "fr": "fr/XMLHttpRequest", "it": "it/XMLHttpRequest", "ja": "ja/XMLHttpRequest", "ko": "ko/XMLHttpRequest", "pl": "pl/XMLHttpRequest", "zh-cn": "zh-cn/DOM/XMLHttpRequest" } ) }}</p>
Zu dieser Version zurücksetzen