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 März 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 mit dem Response-Objekt, das die Antwort auf Ihre Anfrage darstellt, aufgelöst.
Ein fetch()-Promise wird nur abgelehnt, wenn die Anfrage fehlschlägt, zum Beispiel aufgrund einer fehlerhaft formulierten 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 gesteuert, anstatt durch die Direktive der Ressourcen, die sie abruft.
Hinweis:
Die Parameter der fetch()-Methode sind identisch mit denen des Request()-Konstruktors.
Syntax
fetch(resource)
fetch(resource, options)
Parameter
resource-
Definiert die Ressource, die Sie abrufen möchten. Dies kann entweder sein:
- Ein String oder jedes andere Objekt mit einem Stringifier — einschließlich eines
URL-Objekts — der die URL der Ressource bereitstellt, die Sie abrufen möchten. Die URL kann relativ zur Basis-URL sein, die im Window-Kontext derbaseURIdes Dokuments oder im Worker-Kontext dieWorkerGlobalScope.locationist. - Ein
Request-Objekt.
- Ein String oder jedes andere Objekt mit einem Stringifier — einschließlich eines
optionsOptional-
Ein
RequestInit-Objekt, das alle benutzerdefinierten Einstellungen enthält, die Sie auf die Anfrage anwenden möchten.
Rückgabewert
Ausnahmen
AbortErrorDOMException-
Die Anfrage wurde aufgrund eines Aufrufs der
AbortControllerabort()-Methode abgebrochen. NotAllowedErrorDOMException-
Wird ausgelöst, wenn:
- Die Nutzung der Topics API durch eine spezielle
browsing-topicsPermissions Policy explizit verboten ist undbrowsingTopicsauftruegesetzt ist. - Die Nutzung von Private State Token API-Operationen durch eine spezielle
private-state-token-issuanceoderprivate-state-token-redemptionPermissions Policy explizit verboten ist und dieprivateToken-Option spezifiziert ist, einschließlich eines verbotenenprivateToken.operation-Typs.
- Die Nutzung der Topics API durch eine spezielle
TypeError-
Kann aus folgenden Gründen auftreten:
- Die angeforderte URL ist ungültig.
- Die angeforderte URL enthält Anmeldedaten (Benutzername und Passwort).
- Das
RequestInit-Objekt, das als Wert vonoptionsübergeben wurde, enthielt Eigenschaften mit ungültigen Werten. - Die Anfrage wird durch eine Berechtigungspolicy blockiert.
- Es liegt ein Netzwerkfehler vor (zum Beispiel, weil das Gerät keine Verbindung hat).
- Die
privateToken-Init-Option ist spezifiziert, einschließlich einesprivateToken.operation-Typs vonsend-redemption-record, und dasprivateToken.issues-Array war leer oder nicht gesetzt, oder einer oder mehrere der angegebenenissuerssind keine vertrauenswürdigen HTTPS-URLs.
Beispiele
In unserem Fetch Request Beispiel (siehe Fetch Request live) erstellen wir
ein neues Request-Objekt unter Verwendung des entsprechenden Konstruktors und rufen es dann
unter Verwendung eines fetch()-Aufrufs ab. Da wir ein Bild abrufen, führen wir
Response.blob() auf der Antwort aus, um ihr den richtigen MIME-Typ zu geben, damit es
ordnungsgemäß gehandhabt wird, erstellen dann eine Object-URL davon und zeigen sie in einem
<img>-Element an.
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) tun 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, welche Art von zwischengespeicherten Antworten wir akzeptieren:
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 zusammen mit dem Request-Konstruktor übergeben, um denselben Effekt zu erzielen:
const req = new Request("flowers.jpg", options);
Sie können auch ein Objektliterale als headers in init nutzen:
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> |