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 des Window-Interfaces 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, welches die Antwort auf Ihre Anfrage repräsentiert.

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

Die fetch()-Methode wird durch die connect-src-Richtlinie der Content Security Policy gesteuert und nicht durch die Richtlinie der abzurufenden Ressourcen.

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 abzurufenden Ressource angibt. Die URL kann relativ zur Basis-URL sein, welche 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 durch einen Aufruf der AbortController-Methode abort() abgebrochen.

NotAllowedError DOMException

Wird ausgelöst, wenn die Nutzung der Topics API speziell durch eine browsing-topics-Permission Policy untersagt ist und eine fetch()-Anfrage mit browsingTopics: true gestellt wurde.

TypeError

Kann aus folgenden Gründen auftreten:

Grund Fehlerhafte Beispiele
Durch eine Rechtepolitik blockiert Die Nutzung der Attribution Reporting API wird durch eine attribution-reporting Permissions-Policy blockiert, und eine fetch()-Anfrage wurde mit attributionReporting spezifiziert.
Ungültiger Header-Name.
// 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.
const headers = [
  ['Content-Type', 'text/html', 'extra'],
  ['Accept'],
];
fetch('https://example.com/', { headers });
        
Ungültige URL oder Schema, Nutzung eines Schemas, das fetch nicht unterstützt, oder Nutzung eines Schemas, das für einen bestimmten Anfragemodus nicht unterstützt wird.
fetch('blob://example.com/', { mode: 'cors' });
        
URL enthält Anmeldedaten.
fetch('https://user:password@example.com/');
        
Ungültige Referrer-URL.
fetch('https://example.com/', { referrer: './abc\u0000df' });
        
Ungültige Modi (navigate und websocket).
fetch('https://example.com/', { mode: 'navigate' });
        
Wenn der Anfragemodus auf "only-if-cached" gesetzt ist und der Abrufmodus nicht "same-origin" ist.
fetch('https://example.com/', {
  cache: 'only-if-cached',
  mode: 'no-cors',
});
        
Wenn die Anfragemethode ein ungültiges Token ist oder eine der verbotenen Header ('CONNECT', 'TRACE' oder 'TRACK') enthält.
fetch('https://example.com/', { method: 'CONNECT' });
        
Wenn der Anfragemodus "no-cors" ist und die Anfragemethode keine CORS-sicheren Methoden ('GET', 'HEAD' oder 'POST') verwendet.
fetch('https://example.com/', {
  method: 'CONNECT',
  mode: 'no-cors',
});
        
Wenn die Anfragemethode 'GET' oder 'HEAD' ist und der Body nicht null oder undefined ist.
fetch('https://example.com/', {
  method: 'GET',
  body: new FormData(),
});
        
Wenn fetch einen Netzwerkfehler auslöst.

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 einer fetch()-Anfrage ab. Da wir ein Bild abrufen, führen wir Response.blob() auf die Antwort aus, um ihr den richtigen MIME-Typ zu geben, damit sie korrekt verarbeitet wird. Anschließend erstellen wir eine Object-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) tun wir dasselbe, jedoch übergeben wir beim Aufruf von fetch() ein options-Objekt. In diesem Fall können wir einen Cache-Control-Wert setzen, um anzugeben, welche Arten von zwischengespeicherten Antworten akzeptabel 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 im Request-Konstruktor übergeben, um den gleichen Effekt zu erzielen:

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

Sie können auch ein Objekt-Literal 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

BCD tables only load in the browser

Siehe auch