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 auf das Response
-Objekt aufgelöst, das die Antwort auf Ihre Anfrage darstellt.
Ein fetch()
-Promise wird nur dann 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 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 kontrolliert, nicht 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
-
Dies definiert die Ressource, die Sie abrufen möchten. Dies kann entweder sein:
- Ein String oder ein beliebiges anderes Objekt mit einem Stringifier — einschließlich eines
URL
-Objekts — welches die URL der Ressource bereitstellt, die Sie abrufen möchten. Die URL kann relativ zur Basis-URL sein, diebaseURI
des Dokuments in einem Fensterkontext oderWorkerGlobalScope.location
in einem Worker-Kontext ist. - Ein
Request
-Objekt.
- Ein String oder ein beliebiges 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 Nutzung der Topics API explizit von einer
browsing-topics
Permissions Policy untersagt wird und einefetch()
-Anfrage mitbrowsingTopics: true
gestellt 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 wurde mit attributionReporting angegeben. |
Ungültiger Header-Name. |
js
|
Ungültiger Header-Wert. Das Header-Objekt muss genau zwei Elemente enthalten. |
js
|
Ungültige URL oder Schema, oder ein Schema verwenden, das fetch nicht unterstützt, oder ein Schema verwenden, das für einen bestimmten Anfragemodus nicht unterstützt wird. |
js
|
URL enthält Anmeldeinformationen. |
js
|
Ungültige Referrer-URL. |
js
|
Ungültige Modi (navigate und websocket ). |
js
|
Wenn der Anfrage-Cache-Modus "only-if-cached" ist und der Anfragemodus einen anderen als "same-origin" hat. |
js
|
Wenn die Anfragemethode ein ungültiges Name-Token ist oder einer der verbotenen Header
(CONNECT , TRACE oder TRACK ) verwendet wird.
|
js
|
Wenn der Anfragemodus "no-cors" ist und die Anfragemethode keine CORS-sicher gelistete Methode ist
(GET , HEAD oder POST ).
|
js
|
Wenn die Anfragemethode GET oder HEAD ist und der Body nicht null oder undefiniert ist.
|
js
|
Wenn fetch einen Netzwerkfehler wirft. |
Beispiele
In unserem Fetch Request Beispiel (siehe Fetch Request live) erstellen wir ein neues Request
-Objekt mithilfe des entsprechenden Konstruktors und rufen es dann mithilfe eines fetch()
-Aufrufs ab. Da wir ein Bild abrufen, verwenden wir Response.blob()
auf die Antwort, um ihr den richtigen MIME-Typ zu geben, damit sie korrekt verarbeitet 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 beim Aufruf von fetch()
ein options-Objekt übergeben.
In diesem Fall können wir einen Cache-Control
-Wert festlegen, um anzugeben, mit welchen Arten von zwischengespeicherten Antworten wir einverstanden sind:
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 für die Verwendung von fetch()
.
Spezifikationen
Specification |
---|
Fetch # fetch-method |