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 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 löst sich in das Response
-Objekt auf, das die Antwort auf Ihre Anfrage repräsentiert.
Ein fetch()
Promise wird nur abgelehnt, wenn die Anfrage fehlschlägt, zum Beispiel aufgrund einer fehlerhaften 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 anstelle der Direktive der abgerufenen Ressourcen gesteuert.
Hinweis:
Die Parameter der fetch()
Methode sind identisch mit denen des Request()
Konstruktors.
Syntax
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 bietet, die Sie abrufen möchten. Die URL kann relativ zur Basis-URL sein, die im Fensterkontext diebaseURI
des Dokuments oder im Worker-Kontext dieWorkerGlobalScope.location
ist. - Ein
Request
-Objekt.
- Ein String oder ein anderes Objekt mit einem Stringifier — einschließlich eines
options
Optional-
Ein
RequestInit
-Objekt, das benutzerdefinierte Einstellungen enthält, die Sie auf die Anfrage anwenden möchten.
Rückgabewert
Ausnahmen
AbortError
DOMException
-
Die Anfrage wurde aufgrund eines Aufrufs der
AbortController
abort()
-Methode abgebrochen. NotAllowedError
DOMException
-
Wird ausgelöst, wenn die Verwendung der Topics API durch eine
browsing-topics
Berechtigungsrichtlinie ausdrücklich untersagt ist, und einefetch()
-Anfrage mitbrowsingTopics: true
gestellt wurde. TypeError
-
Kann aus folgenden Gründen auftreten:
- Die angeforderte URL ist ungültig.
- Die angeforderte URL enthält Anmeldedaten (Benutzername und Passwort).
- Das als Wert von
options
übergebeneRequestInit
-Objekt enthielt Eigenschaften mit ungültigen Werten. - Die Anfrage wird durch eine Berechtigungsrichtlinie blockiert.
- Es tritt ein Netzwerkfehler auf (z. B. weil das Gerät keine Verbindung hat).
Beispiele
In unserem Fetch Request Beispiel (siehe Fetch Request live) erstellen wir ein neues Request
-Objekt mittels 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 korrekten MIME-Typ zu geben, damit sie ordnungsgemäß behandelt wird, erstellen dann eine Objekt-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 mit 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, 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 mit dem Request
-Konstruktor übergeben, um denselben Effekt zu erzielen:
const req = new Request("flowers.jpg", options);
Sie können auch ein Objektliteral als headers
in init
verwenden:
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
Loading…