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 March 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 wird auf das Response-Objekt aufgelöst, das die Antwort auf Ihre Anfrage darstellt.

Ein fetch()-Promise wird nur dann abgelehnt, wenn die Anfrage fehlschlägt, zum Beispiel aufgrund einer schlecht geformten 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 kontrolliert, nicht durch die Direktive der Ressourcen, die sie abruft.

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 beliebiges anderes Objekt mit einem Stringifier — einschließlich eines URL-Objekts — welches die URL der Ressource bereitstellt, die Sie abrufen möchten. Die URL kann relativ zur Basis-URL sein, die baseURI des Dokuments in einem Fensterkontext oder WorkerGlobalScope.location in einem Worker-Kontext 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 auf ein Response-Objekt aufgelöst wird.

Ausnahmen

AbortError DOMException

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

NotAllowedError DOMException

Wird ausgelöst, wenn die Nutzung der Topics API explizit von einer browsing-topics Permissions Policy untersagt wird und eine fetch()-Anfrage mit browsingTopics: true gestellt wurde.

TypeError

Kann aus folgenden Gründen auftreten:

Grund Fehlerhafte Beispiele
Durch eine Berechtigungsrichtlinie blockiert Die Nutzung der Attribution Reporting API wird durch eine attribution-reporting Permissions-Policy blockiert, und eine fetch()-Anfrage wurde mit attributionReporting angegeben.
Ungültiger Header-Name.
js
// Leerzeichen in "C ontent-Type"
const headers = {
  "C ontent-Type": "text/xml",
  "Breaking-Bad": "<3",
};
fetch("https://example.com/", { headers });
        
Ungültiger Header-Wert. Das Header-Objekt muss genau zwei Elemente enthalten.
js
const headers = [
  ["Content-Type", "text/html", "extra"],
  ["Accept"],
];
fetch("https://example.com/", { headers });
        
Ungültige URL oder Schema, oder ein Schema verwenden, das fetch nicht unterstützt, oder ein Schema verwenden, das für einen bestimmten Anfragemodus nicht unterstützt wird.
js
fetch("blob://example.com/", { mode: "cors" });
        
URL enthält Anmeldeinformationen.
js
fetch("https://user:[email protected]/");
      
Ungültige Referrer-URL.
js
fetch("https://example.com/", { referrer: "./abc\u0000df" });
        
Ungültige Modi (navigate und websocket).
js
fetch("https://example.com/", { mode: "navigate" });
        
Wenn der Anfrage-Cache-Modus "only-if-cached" ist und der Anfragemodus einen anderen als "same-origin" hat.
js
fetch("https://example.com/", {
  cache: "only-if-cached",
  mode: "no-cors",
});
        
Wenn die Anfragemethode ein ungültiges Name-Token ist oder einer der verbotenen Header (CONNECT, TRACE oder TRACK) verwendet wird.
js
fetch("https://example.com/", { method: "CONNECT" });
        
Wenn der Anfragemodus "no-cors" ist und die Anfragemethode keine CORS-sicher gelistete Methode ist (GET, HEAD oder POST).
js
fetch("https://example.com/", {
  method: "CONNECT",
  mode: "no-cors",
});
        
Wenn die Anfragemethode GET oder HEAD ist und der Body nicht null oder undefiniert ist.
js
fetch("https://example.com/", {
  method: "GET",
  body: new FormData(),
});
        
Wenn fetch einen Netzwerkfehler wirft.

Beispiele

In unserem Fetch Request Beispiel (siehe Fetch Request live) erstellen wir ein neues Request-Objekt mithilfe des entsprechenden Konstruktors und rufen es dann mithilfe eines fetch()-Aufrufs ab. Da wir ein Bild abrufen, verwenden wir Response.blob() auf die Antwort, um ihr den richtigen MIME-Typ zu geben, damit sie korrekt verarbeitet 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 beim Aufruf von fetch() ein options-Objekt übergeben. In diesem Fall können wir einen Cache-Control-Wert festlegen, um anzugeben, mit welchen Arten von zwischengespeicherten Antworten wir einverstanden sind:

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 für die Verwendung von fetch().

Spezifikationen

Specification
Fetch
# fetch-method

Browser-Kompatibilität

Siehe auch