Window: fetch() Method

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 des Window-Interfaces startet den Prozess des Abrufens einer Ressource aus dem Netzwerk. Sie 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 abgelehnt, wenn die Anfrage fehlschlägt, beispielsweise aufgrund einer fehlerhaft geformten 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 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 anderes Objekt mit einem Stringifier — einschließlich eines URL-Objekts — das die URL der Ressource bereitstellt, die Sie abrufen möchten. Die URL kann relativ zur Basis-URL sein, welche im Fensterkontext die baseURI des Dokuments ist oder WorkerGlobalScope.location im Worker-Kontext.
  • Ein Request-Objekt.
options Optional

Ein RequestInit-Objekt, das alle benutzerdefinierten Einstellungen enthält, die Sie auf die Anforderung 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 Methode AbortController abort() abgebrochen.

NotAllowedError DOMException

Ausgelöst, wenn die Nutzung der Topics API ausdrücklich durch eine browsing-topics Permissions Policy untersagt wird und eine fetch()-Anfrage mit browsingTopics: true gestellt wurde.

TypeError

Kann aus folgenden Gründen auftreten:

Grund Fehlschlagende Beispiele
Durch eine Berechtigungsrichtlinie blockiert Die Verwendung 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 Verwendung eines Schemas, das fetch nicht unterstützt, oder Nutzung eines Schemas, das für einen bestimmten Anforderungsmodus nicht unterstützt wird.
js
fetch("blob://example.com/", { mode: "cors" });
        
URL enthält Anmeldeinformationen.
js
fetch("https://user:password@example.com/");
        
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 Anforderungscachemodus "only-if-cached" ist und der Anforderungsmodus anders als "same-origin" ist.
js
fetch("https://example.com/", {
  cache: "only-if-cached",
  mode: "no-cors",
});
        
Wenn die Anforderungsmethode ein ungültiger Namens-Token oder einer der verbotenen Header ist (CONNECT, TRACE oder TRACK).
js
fetch("https://example.com/", { method: "CONNECT" });
        
Wenn der Anforderungsmodus "no-cors" ist und die Anforderungsmethode nicht eine CORS-sicher gelistete Methode ist (GET, HEAD oder POST).
js
fetch("https://example.com/", {
  method: "CONNECT",
  mode: "no-cors",
});
        
Wenn die Anforderungsmethode GET oder HEAD ist und der Body nicht null oder nicht 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 mit dem entsprechenden Konstruktor und rufen es dann mit einem fetch()-Aufruf ab. Da wir ein Bild abrufen, führen wir Response.blob() für die Antwort aus, um ihm den richtigen MIME-Typ zu geben, damit es ordnungsgemäß behandelt wird. Dann erstellen wir eine Objekt-URL daraus und zeigen es 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 with init-Beispiel (siehe Fetch Request init live) machen wir das gleiche, außer dass wir beim Aufruf von fetch() ein options-Objekt übergeben. In diesem Fall können wir einen Cache-Control-Wert setzen, um anzugeben, mit welchen Art 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 den gleichen 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