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

Ein fetch()-Promise wird nur 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 auf Fehler hinweisen (404, 504, etc.). Stattdessen muss ein then()-Handler die Eigenschaften Response.ok und/oder Response.status prüfen.

Die fetch()-Methode wird durch die connect-src Direktive der Content Security Policy gesteuert, anstatt 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, die das baseURI des Dokuments im Kontext eines Fensters ist, oder WorkerGlobalScope.location im Kontext eines Workers.
  • 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 zu einem 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 durch eine browsing-topics Berechtigungsrichtlinie ausdrücklich untersagt wird und eine fetch()-Anfrage mit browsingTopics: true gemacht 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 mit attributionReporting wurde angegeben.
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, Verwenden eines Schemas, das fetch nicht unterstützt, oder Verwenden 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 Cache-Modus der Anfrage "only-if-cached" ist und der Anfrage-Modus nicht "same-origin" ist.
fetch('https://example.com/', {
  cache: 'only-if-cached',
  mode: 'no-cors',
});
        
Wenn die Anfragemethode ein ungültiges Namenstoken oder einer der verbotenen Header ('CONNECT', 'TRACE' oder 'TRACK') ist.
fetch('https://example.com/', { method: 'CONNECT' });
        
Wenn der Anfragemodus "no-cors" ist und die Anfragemethode keine CORS-sichere Liste enthält ('GET', 'HEAD' oder 'POST').
fetch('https://example.com/', {
  method: 'CONNECT',
  mode: 'no-cors',
});
        
Wenn die Anfragemethode 'GET' oder 'HEAD' ist und der Body nicht null oder undefiniert ist.
fetch('https://example.com/', {
  method: 'GET',
  body: new FormData(),
});
        
Wenn fetch einen Netzwerkfehler verursacht.

Beispiele

In unserem Fetch Request Beispiel (siehe Fetch Request live) erstellen wir ein neues Request Objekt mithilfe 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 richtigen MIME-Typ zuzuweisen, damit es korrekt behandelt wird, und erstellen dann eine Object-URL daraus 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 with 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, 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 im 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