Window: fetch() Method
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 des Window
-Interfaces startet den Prozess des Abrufens einer Ressource aus dem Netzwerk. Sie 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 abgelehnt, wenn die Anfrage fehlschlägt, beispielsweise aufgrund einer fehlerhaft geformten 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 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 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, welche im Fensterkontext diebaseURI
des Dokuments ist oderWorkerGlobalScope.location
im Worker-Kontext. - Ein
Request
-Objekt.
- Ein String oder ein anderes Objekt mit einem Stringifier — einschließlich eines
options
Optional-
Ein
RequestInit
-Objekt, das alle benutzerdefinierten Einstellungen enthält, die Sie auf die Anforderung anwenden möchten.
Rückgabewert
Ausnahmen
AbortError
DOMException
-
Die Anfrage wurde aufgrund eines Aufrufs der Methode
AbortController
abort()
abgebrochen. NotAllowedError
DOMException
-
Ausgelöst, wenn die Nutzung der Topics API ausdrücklich durch eine
browsing-topics
Permissions Policy untersagt wird und einefetch()
-Anfrage mitbrowsingTopics: true
gestellt wurde. TypeError
-
Kann aus folgenden Gründen auftreten:
Grund | Fehlschlagende Beispiele |
---|---|
Durch eine Berechtigungsrichtlinie blockiert | Die Verwendung 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 Verwendung eines Schemas, das fetch nicht unterstützt, oder Nutzung eines Schemas, das für einen bestimmten Anforderungsmodus nicht unterstützt wird. |
js
|
URL enthält Anmeldeinformationen. |
js
|
Ungültige Referrer-URL. |
js
|
Ungültige Modi (navigate und websocket ). |
js
|
Wenn der Anforderungscachemodus "only-if-cached" ist und der Anforderungsmodus anders als "same-origin" ist. |
js
|
Wenn die Anforderungsmethode ein ungültiger Namens-Token oder einer der verbotenen Header ist
(CONNECT , TRACE oder TRACK ).
|
js
|
Wenn der Anforderungsmodus "no-cors" ist und die Anforderungsmethode nicht eine CORS-sicher gelistete Methode ist
(GET , HEAD oder POST ).
|
js
|
Wenn die Anforderungsmethode GET oder HEAD ist und der Body nicht null oder nicht undefiniert ist.
|
js
|
Wenn fetch einen Netzwerkfehler wirft. |
Beispiele
In unserem Fetch Request-Beispiel (siehe Fetch Request live) erstellen wir ein neues Request
-Objekt mit dem entsprechenden Konstruktor und rufen es dann mit einem fetch()
-Aufruf ab. Da wir ein Bild abrufen, führen wir Response.blob()
für die Antwort aus, um ihm den richtigen MIME-Typ zu geben, damit es ordnungsgemäß behandelt wird. Dann erstellen wir eine Objekt-URL daraus und zeigen es 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) machen wir das gleiche, außer dass wir beim Aufruf von fetch()
ein options-Objekt übergeben. In diesem Fall können wir einen Cache-Control
-Wert setzen, um anzugeben, mit welchen Art 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 den gleichen 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 |