Start · Sprachen · JavaScript · Referenz · Window.fetch()

Window.fetch()

Methode

Die Methode <code>fetch()</code> des <code>Window</code>-Interfaces startet das Abrufen einer Ressource aus dem Netzwerk und liefert ein Promise mit der Response zurück.

Kategorie: webapi

Signatur

fetch(resource) / fetch(resource, options)

Beschreibung

Die Methode fetch() des Window-Interfaces startet den Vorgang 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 zum Response-Objekt aufgelöst, das die Antwort auf Ihre Anfrage repräsentiert.

Ein fetch()-Promise wird nur dann abgelehnt, wenn die Anfrage fehlschlägt, zum Beispiel aufgrund einer fehlerhaft aufgebauten Anfrage-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 prüfen.

Die Methode fetch() wird durch die connect-src-Direktive der Content Security Policy gesteuert und nicht durch die Direktive der Ressourcen, die sie abruft.

Parameter

Name Typ Default Beschreibung
$resource Pflicht string | URL | Request — Definiert die Ressource, die abgerufen werden soll. Dies kann entweder ein String oder ein anderes Objekt mit einem stringifier — einschließlich eines URL-Objekts — sein, das die URL der abzurufenden Ressource bereitstellt. Die URL kann relativ zur Basis-URL sein, welche in einem Window-Kontext das baseURI des Dokuments ist, oder WorkerGlobalScope.location in einem Worker-Kontext. Alternativ kann ein Request-Objekt übergeben werden.
$options RequestInit — Ein RequestInit-Objekt, das benutzerdefinierte Einstellungen enthält, die auf die Anfrage angewendet werden sollen.

Rückgabewert

Typ
Promise<Response>
Beschreibung
Ein Promise, das zu einem Response-Objekt aufgelöst wird.

Beispiele

Fetch-Request-Beispiel

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);
  });

Fetch-Request mit init

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

// Eine gecachte Antwort ist in Ordnung, sofern sie nicht älter als eine Woche ist
reqHeaders.set("Cache-Control", "max-age=604800");

const options = {
  headers: reqHeaders,
};

// init als "options"-Objekt mit unseren Headern übergeben.
const req = new Request("flowers.jpg", options);

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

init an den Request-Konstruktor übergeben

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

Objektliteral als headers

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

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

// Wichtig · Fallstricke

Die Parameter der Methode fetch() sind identisch mit denen des Request()-Konstruktors. Ausnahmen: - AbortError (DOMException): Die Anfrage wurde aufgrund eines Aufrufs der Methode abort() eines AbortController abgebrochen. - NotAllowedError (DOMException): Wird geworfen, wenn die Nutzung der Topics API durch eine browsing-topics-Permissions-Policy verboten ist und browsingTopics auf true gesetzt ist, oder wenn die Nutzung von Private-State-Token-API-Operationen durch eine entsprechende Permissions-Policy verboten ist und die Option privateToken angegeben ist. - TypeError: Kann aus folgenden Gründen auftreten: Die angeforderte URL ist ungültig; die URL enthält Zugangsdaten (Benutzername und Passwort); das als options übergebene RequestInit-Objekt enthält Eigenschaften mit ungültigen Werten; die Anfrage wird durch eine Permissions Policy blockiert; es liegt ein Netzwerkfehler vor; oder die init-Option privateToken ist mit einem privateToken.operation vom Typ send-redemption-record angegeben und das privateToken.issues-Array war leer oder nicht gesetzt bzw. einer oder mehrere der angegebenen issuers sind keine vertrauenswürdigen HTTPS-URLs.