Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
In diesem Leitfaden schauen wir uns an, wie man XMLHttpRequest verwendet, um HTTP-Anfragen zu senden, um Daten zwischen der Website und einem Server auszutauschen.
Beispiele für sowohl häufige als auch weniger bekannte Anwendungsfälle für XMLHttpRequest sind enthalten.
Um eine HTTP-Anfrage zu senden:
Nach Abschluss der Transaktion enthält das XMLHttpRequest-Objekt nützliche Informationen wie den Antwortinhalt und den HTTP-Status des Ergebnisses.
Eine über XMLHttpRequest gestellte Anfrage kann auf zwei Arten Daten abrufen, asynchron oder synchron. Die Art der Anfrage wird durch das optionale async-Argument bestimmt (das dritte Argument), das in der Methode XMLHttpRequest.open() festgelegt wird. Wenn dieses Argument true ist oder nicht angegeben wird, wird die XMLHttpRequest asynchron verarbeitet, andernfalls synchron. Eine detaillierte Diskussion und Demonstrationen dieser beiden Arten von Anfragen finden Sie auf der Seite zu synchronen und asynchronen Anfragen. Sie können synchrone Anfragen außerhalb von Web-Workern nicht verwenden, da sie die Hauptschnittstelle einfrieren.
Hinweis: Der Konstruktor XMLHttpRequest ist nicht nur auf XML-Dokumente beschränkt. Er beginnt mit "XML", weil das Hauptformat, das ursprünglich zum asynchronen Datenaustausch verwendet wurde, XML war.
Es gibt mehrere Arten von Antwort-Attributen, die für den XMLHttpRequest()-Konstruktor definiert sind. Diese geben dem Client, der die XMLHttpRequest durchführt, wichtige Informationen über den Status der Antwort. Einige Fälle, in denen der Umgang mit nicht-textuellen Antworttypen möglicherweise einige Manipulation und Analyse erfordert, sind in den folgenden Abschnitten beschrieben.
Wenn Sie XMLHttpRequest verwenden, um den Inhalt eines entfernten XML-Dokuments abzurufen, ist die responseXML-Eigenschaft ein DOM-Objekt, das ein analysiertes XML-Dokument enthält. Dies könnte sich als schwierig erweisen, zu manipulieren und zu analysieren. Es gibt vier Hauptmethoden zur Analyse dieses XML-Dokuments:
Hinweis: XMLHttpRequest kann jetzt HTML für Sie interpretieren, indem es die responseXML-Eigenschaft verwendet. Lesen Sie den Artikel über HTML in XMLHttpRequest, um zu erfahren, wie Sie dies tun können.
Wenn Sie XMLHttpRequest verwenden, um den Inhalt einer entfernten HTML-Webseite abzurufen, ist die responseText-Eigenschaft eine Zeichenfolge, die das rohe HTML enthält. Dies könnte sich als schwierig erweisen, zu manipulieren und zu analysieren. Es gibt drei Hauptmethoden, um diese rohe HTML-Zeichenfolge zu analysieren und zu parsen:
Obwohl XMLHttpRequest am häufigsten zum Senden und Empfangen von Textdaten verwendet wird, kann es auch verwendet werden, um binäre Inhalte zu senden und zu empfangen. Es gibt mehrere gut getestete Methoden, um die Antwort eines XMLHttpRequest dazu zu zwingen, binäre Daten zu senden. Diese beinhalten die Nutzung der overrideMimeType()-Methode am XMLHttpRequest-Objekt und sind eine praktikable Lösung.
Es stehen jedoch modernere Techniken zur Verfügung, da das Attribut responseType jetzt eine Reihe zusätzlicher Inhaltstypen unterstützt, was das Senden und Empfangen von Binärdaten erheblich erleichtert.
Betrachten Sie beispielsweise diesen Schnipsel, der den responseType von "arraybuffer" verwendet, um den entfernten Inhalt in ein ArrayBuffer-Objekt abzurufen, das die rohen Binärdaten speichert.
Für weitere Beispiele schauen Sie sich die Seite Senden und Empfangen von Binärdaten an.
XMLHttpRequest bietet die Möglichkeit, verschiedene Ereignisse zu überwachen, die während der Verarbeitung der Anfrage auftreten können. Dazu gehören periodische Fortschrittsbenachrichtigungen, Fehlermeldungen und so weiter.
Die Unterstützung für DOM-Überwachung bei progress-Ereignissen von XMLHttpRequest-Transfers folgt der Spezifikation für Fortschrittsereignisse: Diese Ereignisse setzen das ProgressEvent-Interface um. Die tatsächlichen Ereignisse, die Sie überwachen können, um den Zustand eines laufenden Transfers zu bestimmen, sind:
progressDie Menge der abgerufenen Daten hat sich geändert.
loadDer Transfer ist abgeschlossen; alle Daten sind nun in der response.
Wir fügen Ereignis-Listener für die verschiedenen Ereignisse hinzu, die beim Durchführen eines Datentransfers mit XMLHttpRequest gesendet werden.
Hinweis: Sie müssen die Ereignis-Listener hinzufügen, bevor Sie open() auf die Anfrage aufrufen. Andernfalls werden die progress-Ereignisse nicht ausgelöst.
Der Fortschrittsereignis-Handler, der durch die updateProgress()-Funktion in diesem Beispiel spezifiziert wird, erhält die Gesamtanzahl der zu übertragenden Bytes sowie die Anzahl der bisher übertragenen Bytes in den Feldern total und loaded des Ereignisses. Wenn jedoch das Feld lengthComputable falsch ist, ist die Gesamtlänge unbekannt und wird null sein.
Fortschrittsereignisse existieren sowohl für Download- als auch für Upload-Transfers. Die Download-Ereignisse werden direkt beim XMLHttpRequest-Objekt ausgelöst, wie im obigen Beispiel gezeigt. Die Upload-Ereignisse werden beim XMLHttpRequest.upload-Objekt ausgelöst, wie unten gezeigt:
Hinweis: Fortschrittsereignisse sind nicht verfügbar für das file:-Protokoll.
Fortschrittsereignisse treten für jedes Datenstück auf, das empfangen wird, einschließlich des letzten Stücks, in Fällen, in denen das letzte Paket empfangen wird und die Verbindung geschlossen wird, bevor das Fortschrittsereignis ausgelöst wird. In diesem Fall wird das Fortschrittsereignis automatisch ausgelöst, wenn das Ladeereignis für dieses Paket auftritt. So können Sie den Fortschritt zuverlässig überwachen, indem Sie nur das "progress"-Ereignis beobachten.
Man kann auch alle drei Ladeendbedingungen (abort, load oder error) mit dem loadend-Ereignis erkennen:
Beachten Sie, dass es keine Möglichkeit gibt, sicher zu sein, welche Bedingung den Vorgang zum Stoppen gebracht hat, basierend auf den Informationen, die vom loadend-Ereignis empfangen wurden; Sie können dies jedoch verwenden, um Aufgaben zu handhaben, die in allen End-of-Transfer-Szenarien durchgeführt werden müssen.
Lassen Sie uns zwei Funktionen erstellen:
Und zum Testen:
Wenn Sie wissen möchten, ob sich die aktuelle Seite geändert hat, lesen Sie den Artikel über document.lastModified.
Moderne Browser unterstützen Cross-Site-Anfragen, indem sie den Standard Cross-Origin Resource Sharing (CORS) implementieren. Solange der Server konfiguriert ist, um Anfragen von der Herkunft Ihrer Webanwendung zuzulassen, wird XMLHttpRequest funktionieren. Andernfalls wird eine INVALID_ACCESS_ERR-Ausnahme ausgelöst.
Ein browserkompatibler Ansatz, um den Cache zu umgehen, besteht darin, einen Zeitstempel an die URL anzuhängen, wobei darauf geachtet wird, ein "?" oder "&" je nach Bedarf einzufügen. Zum Beispiel:
http://example.com/bar.html -> http://example.com/bar.html?12345 http://example.com/bar.html?foobar=baz -> http://example.com/bar.html?foobar=baz&12345Da der lokale Cache nach URL indexiert ist, macht dies jede Anfrage einzigartig, wodurch der Cache umgangen wird.
Sie können URLs automatisch mit dem folgenden Code anpassen:
Der empfohlene Weg zur Aktivierung von Cross-Site-Scripting besteht darin, das Access-Control-Allow-Origin HTTP-Header in der Antwort auf den XMLHttpRequest zu verwenden.
Wenn Sie mit einem XMLHttpRequest status=0 und statusText=null erhalten, bedeutet dies, dass die Anfrage nicht ausgeführt werden durfte. Sie war UNSENT. Ein häufiger Grund dafür ist, dass sich der Ursprung des XMLHttpRequest (bei der Erstellung des XMLHttpRequest) geändert hat, wenn der XMLHttpRequest anschließend open() ist. Dies kann zum Beispiel passieren, wenn man einen XMLHttpRequest hat, der bei einem onunload-Ereignis für ein Fenster abfeuert, der erwartete XMLHttpRequest wird erstellt, wenn das zu schließende Fenster noch da ist, und schließlich die Anfrage sendet (in anderen Worten, open()) wenn dieses Fenster seinen Fokus verloren hat und ein anderes Fenster den Fokus gewinnt. Der effektivste Weg, dieses Problem zu vermeiden, besteht darin, einen Listener auf das DOMActivate-Ereignis des neuen Fensters zu setzen, der gesetzt wird, sobald das beendete Fenster sein unload-Event ausgelöst hat.
| XMLHttpRequest # interface-xmlhttprequest |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.