--- title: XMLHttpRequest slug: Web/API/XMLHttpRequest translation_of: Web/API/XMLHttpRequest ---
{{APIRef("XMLHttpRequest")}}
XMLHttpRequest
ist ein JavaScript Objekt, das von Microsoft entwickelt und von Mozilla, Apple, und 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();
Für Näheres zur Verwendung von XMLHttpRequest
, siehe Using XMLHttpRequest.
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); |
Attribut | Typ | Beschreibung | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Function? |
Ein JavaScript function Objekt, das bei jedem Wechsel des Warnung: Dies sollte nicht mit synchronen Anfragen und darf nicht aus nativem Code heraus verwendet werden.
|
||||||||||||||||||||
readyState |
unsigned short |
Der Status der Anfrage:
|
||||||||||||||||||||
response |
variiert |
Der Entitätskörper der Antwort (response entity body) gemäss |
||||||||||||||||||||
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.
Anmerkung: Ab Gecko 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 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. 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 Listener zu upload hinzufügt. |
||||||||||||||||||||
withCredentials |
boolean |
Zeigt an, ob Site-übergreifende Anmerkung: Anfragen an die ursprüngliche Site sind davon niemals betroffen.
Anmerkung: Ab Gecko 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. |
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 |
mozSystem {{ReadOnlyInline}} |
boolean |
Falls |
mozBackgroundRequest |
boolean |
Zeigt an, ob das Objekt eine Service-Anfrage im Hintergrund darstellt. Falls 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 {{obsolete_inline("6")}} {{ReadOnlyInline}} |
ArrayBuffer |
Die Antwort auf die Anfrage, als typisiertes JavaScript 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 Zeigt an, ob als Antwort ein Stream von möglicherweise mehreren XML Dokumenten erwartet wird. Wird dies auf 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 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. |
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 );
objParameters
mozAnon
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
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.Bricht die Anfrage ab, falls sie bereits gesendet wurde.
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.
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.
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.
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 );
method
url
async
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
password
Ü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);
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.
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);
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.
Setzt den Wert eines HTTP Anfrage-Headers. Aufrufe von setRequestHeader()
müssen nach open()
, aber vor send()
erfolgen.
void setRequestHeader( DOMString header, DOMString value );
header
value
Initialisiert das Objekt für die Verwendung aus C++ Code.
[noscript] void init( in nsIPrincipal principal, in nsIScriptContext scriptContext, in nsPIDOMWindow ownerWindow );
principal
null
sein.scriptContext
null
sein.ownerWindow
null
sein.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()
.
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.
body
sendAsBinary()
polyfillDa 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() Polyfill :: |*| |*| 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); */ }; }
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.
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
.XMLHttpRequest
ist in Gecko implementiert mittels der {{interface("nsIXMLHttpRequest")}}, {{interface("nsIXMLHttpRequestEventTarget")}}, und {{interface("nsIJSXMLHttpRequest")}} Schnittstellen.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.
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 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.