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.
Ü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 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
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 Read only |
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 (Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8) 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 Read only |
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 Read only |
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 Read only |
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 (Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8) 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 Read only |
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 Read only |
boolean |
Falls |
mozSystem Read only |
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 Veraltet seit Gecko 6 Read only |
ArrayBuffer |
Die Antwort auf die Anfrage, als typisiertes JavaScript Array. Dies ist NULL falls die Anfrage erfolglos war oder noch nicht gesendet wurde. |
multipart Veraltet seit Gecko 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. |
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- Es gibt zwei Flags, die gesetzt werden können:
mozAnon- Boolean: Wenn dieses Flag auf
truegesetzt 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
truezu setzen, ermöglicht das Herstellen von Cross-Site Verbindungen, ohne dass der Server dem mittels CORS zustimmen muss. Erfodert das Setzen vonmozAnon: 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.
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 Wertfalseist, kehrt diesend()Methode nicht zurück, bis die Antwort vollständig empfangen worden ist. Ist ertrue, kehrt sie sofort zurück, und die Benachrichtigung über die vollendete Transaktion erfolgt mittels Events. Dies musstruesein falls dasmultipartAttributtrueist, 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.
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.
[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
nullsein. scriptContext- Der Skript-Kontext, der für die Anfrage benutzt werden soll; darf nicht
nullsein. ownerWindow- Das Fenster, das zu der Anfrage gehört; darf
nullsein.
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().
sendAsBinary()
Requires Gecko 1.9 (Firefox 3)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); */
};
}
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
XMLHttpRequestVerbindungen pro Server auf 6 (frühere Versionen begrenzen dies auf 2 pro Server). Manche interaktiven Websites können eineXMLHttpRequestVerbindung 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 Voreinstellungnetwork.http.max-persistent-connections-per-serverinabout:config. - Ab Gecko 7.0 werden Header, die durch
setRequestHeader()gesetzt wurden, mit der Anfrage mitgeschickt, wenn einer Umleitung gefolgt wird. Zuvor wurden diese Header nicht gesendet. XMLHttpRequestist in Gecko implementiert mittels dernsIXMLHttpRequest,nsIXMLHttpRequestEventTarget, undnsIJSXMLHttpRequestSchnittstellen.
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 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
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|
| Grundsätzliche Unterstützung (XHR1) | 1 | 1.0 | 5 (via ActiveXObject) 7 (XMLHttpRequest) |
(Ja) | 1.2 |
send(ArrayBuffer) |
9 | 9 | ? | 11.60 | ? |
send(Blob) |
7 | 3.6 | ? | 12 | ? |
send(FormData) |
6 | 4 | ? | 12 | ? |
sendAsBinary(DOMString) |
Nicht unterstützt – benutze polyfill | 1.9 | ? | ? | ? |
response |
10 | 6 | 10 | 11.60 | ? |
responseType = 'arraybuffer' |
10 | 6 | 10 | 11.60 | ? |
responseType = 'blob' |
19 | 6 | 10 | 12 | ? |
responseType = 'document' |
18 | 11 | 10 | Nicht unterstützt | Nicht unterstützt |
responseType = 'json' |
Nicht unterstützt | 10 | Nicht unterstützt | 12 | Nicht unterstützt |
| Progress Events | 7 | 3.5 | 10 | 12 | ? |
withCredentials |
3 | 3.5 | 10 | 12 | 4 |
timeout |
Nicht unterstützt | 12.0 | 8 | ? | Nicht unterstützt |
responseType = 'moz-blob' |
Nicht unterstützt | 12.0 | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt |
| Feature | Android | Chrome für Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Grundsätzliche Unterstützung | ? | 0.16 | (Ja) | ? | ? | ? |
Gecko Anmerkungen
Gecko 11.0 (Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8) 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 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9) und spätere unterstützen die Verwendung von XMLHttpRequest zum Lesen von data: URLs.
Siehe auch
- MDN Artikel über XMLHttpRequest:
- XMLHttpRequest Referencen von W3C und Browserherstellern:
- W3C: XMLHttpRequest (base features)
- W3C: XMLHttpRequest (latest editor's draft with extensions to the base functionality, formerly XMLHttpRequest Level 2)
- Microsoft documentation
- Apple developers' reference
- "Using the XMLHttpRequest Object" (jibbering.com)
- XMLHttpRequest - REST and the Rich User Experience
- HTML5 Rocks - New Tricks in XMLHttpRequest2