Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Window: fetch() Methode

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨März 2017⁩.

* Some parts of this feature may have varying levels of support.

Die fetch() Methode der Window-Schnittstelle startet den Prozess des Abrufens einer Ressource aus dem Netzwerk und gibt ein Promise zurück, das erfüllt wird, sobald die Antwort verfügbar ist.

Das Promise löst sich in das Response-Objekt auf, das die Antwort auf Ihre Anfrage repräsentiert.

Ein fetch() Promise wird nur abgelehnt, wenn die Anfrage fehlschlägt, zum Beispiel aufgrund einer fehlerhaften Anforderungs-URL oder eines Netzwerkfehlers. Ein fetch() Promise wird nicht abgelehnt, wenn der Server mit HTTP-Statuscodes antwortet, die Fehler anzeigen (404, 504 usw.). Stattdessen muss ein then()-Handler die Eigenschaften Response.ok und/oder Response.status überprüfen.

Die fetch() Methode wird durch die connect-src Direktive der Content Security Policy anstelle der Direktive der abgerufenen Ressourcen gesteuert.

Hinweis: Die Parameter der fetch() Methode sind identisch mit denen des Request() Konstruktors.

Syntax

js
fetch(resource)
fetch(resource, options)

Parameter

resource

Dies definiert die Ressource, die Sie abrufen möchten. Dies kann entweder sein:

  • Ein String oder ein anderes Objekt mit einem Stringifier — einschließlich eines URL-Objekts — das die URL der Ressource bietet, die Sie abrufen möchten. Die URL kann relativ zur Basis-URL sein, die im Fensterkontext die baseURI des Dokuments oder im Worker-Kontext die WorkerGlobalScope.location ist.
  • Ein Request-Objekt.
options Optional

Ein RequestInit-Objekt, das benutzerdefinierte Einstellungen enthält, die Sie auf die Anfrage anwenden möchten.

Rückgabewert

Ein Promise, das sich in ein Response-Objekt auflöst.

Ausnahmen

AbortError DOMException

Die Anfrage wurde aufgrund eines Aufrufs der AbortController abort()-Methode abgebrochen.

NotAllowedError DOMException

Wird ausgelöst, wenn die Verwendung der Topics API durch eine browsing-topics Berechtigungsrichtlinie ausdrücklich untersagt ist, und eine fetch()-Anfrage mit browsingTopics: true gestellt wurde.

TypeError

Kann aus folgenden Gründen auftreten:

  • Die angeforderte URL ist ungültig.
  • Die angeforderte URL enthält Anmeldedaten (Benutzername und Passwort).
  • Das als Wert von options übergebene RequestInit-Objekt enthielt Eigenschaften mit ungültigen Werten.
  • Die Anfrage wird durch eine Berechtigungsrichtlinie blockiert.
  • Es tritt ein Netzwerkfehler auf (z. B. weil das Gerät keine Verbindung hat).

Beispiele

In unserem Fetch Request Beispiel (siehe Fetch Request live) erstellen wir ein neues Request-Objekt mittels des entsprechenden Konstruktors und rufen es dann mit einem fetch()-Aufruf ab. Da wir ein Bild abrufen, führen wir Response.blob() auf der Antwort aus, um ihr den korrekten MIME-Typ zu geben, damit sie ordnungsgemäß behandelt wird, erstellen dann eine Objekt-URL davon und zeigen sie in einem <img>-Element an.

js
const myImage = document.querySelector("img");

const myRequest = new Request("flowers.jpg");

window
  .fetch(myRequest)
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }

    return response.blob();
  })
  .then((response) => {
    myImage.src = URL.createObjectURL(response);
  });

In unserem Fetch Request mit init Beispiel (siehe Fetch Request init live) machen wir dasselbe, außer dass wir ein options-Objekt übergeben, wenn wir fetch() aufrufen. In diesem Fall können wir einen Cache-Control-Wert festlegen, um anzugeben, welche Art von zwischengespeicherten Antworten wir akzeptieren:

js
const myImage = document.querySelector("img");
const reqHeaders = new Headers();

// A cached response is okay unless it's more than a week old
reqHeaders.set("Cache-Control", "max-age=604800");

const options = {
  headers: reqHeaders,
};

// Pass init as an "options" object with our headers.
const req = new Request("flowers.jpg", options);

fetch(req).then((response) => {
  // …
});

Sie könnten das init-Objekt auch mit dem Request-Konstruktor übergeben, um denselben Effekt zu erzielen:

js
const req = new Request("flowers.jpg", options);

Sie können auch ein Objektliteral als headers in init verwenden:

js
const options = {
  headers: {
    "Cache-Control": "max-age=60480",
  },
};

const req = new Request("flowers.jpg", options);

Der Artikel Using fetch bietet weitere Beispiele zur Verwendung von fetch().

Spezifikationen

Specification
Fetch
# fetch-method

Browser-Kompatibilität

Siehe auch