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 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 auf das Response
-Objekt aufgelöst, welches die Antwort auf Ihre Anfrage repräsentiert.
Ein fetch()
-Promise wird nur dann abgelehnt, wenn die Anfrage fehlschlägt, zum Beispiel aufgrund einer schlecht formatierten Anfrage-URL oder eines Netzwerkfehlers. Ein fetch()
-Promise wird nicht abgelehnt, wenn der Server mit HTTP-Statuscodes antwortet, die auf Fehler hinweisen (404
, 504
usw.). Stattdessen muss ein then()
-Handler die Response.ok
- und/oder Response.status
-Eigenschaften prüfen.
Die fetch()
-Methode wird durch die connect-src
-Richtlinie der Content Security Policy gesteuert und nicht durch die Richtlinie der abzurufenden Ressourcen.
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 abzurufenden Ressource angibt. Die URL kann relativ zur Basis-URL sein, welche diebaseURI
des Dokuments in einem Fensterkontext oderWorkerGlobalScope.location
in einem Worker-Kontext 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 durch einen Aufruf der
AbortController
-Methodeabort()
abgebrochen. NotAllowedError
DOMException
-
Wird ausgelöst, wenn die Nutzung der Topics API speziell durch eine
browsing-topics
-Permission Policy untersagt ist und einefetch()
-Anfrage mitbrowsingTopics: true
gestellt wurde. TypeError
-
Kann aus folgenden Gründen auftreten:
Grund | Fehlerhafte Beispiele |
---|---|
Durch eine Rechtepolitik blockiert | Die Nutzung der Attribution Reporting API wird durch eine attribution-reporting Permissions-Policy blockiert, und eine fetch() -Anfrage wurde mit attributionReporting spezifiziert. |
Ungültiger Header-Name. |
// Leerzeichen in "C ontent-Type" const headers = { 'C ontent-Type': 'text/xml', 'Breaking-Bad': '<3', }; fetch('https://example.com/', { headers }); |
Ungültiger Header-Wert. Das Header-Objekt muss genau zwei Elemente enthalten. |
const headers = [ ['Content-Type', 'text/html', 'extra'], ['Accept'], ]; fetch('https://example.com/', { headers }); |
Ungültige URL oder Schema, Nutzung eines Schemas, das fetch nicht unterstützt, oder Nutzung eines Schemas, das für einen bestimmten Anfragemodus nicht unterstützt wird. |
fetch('blob://example.com/', { mode: 'cors' }); |
URL enthält Anmeldedaten. |
fetch('https://user:password@example.com/'); |
Ungültige Referrer-URL. |
fetch('https://example.com/', { referrer: './abc\u0000df' }); |
Ungültige Modi (navigate und websocket ). |
fetch('https://example.com/', { mode: 'navigate' }); |
Wenn der Anfragemodus auf "only-if-cached" gesetzt ist und der Abrufmodus nicht "same-origin" ist. |
fetch('https://example.com/', { cache: 'only-if-cached', mode: 'no-cors', }); |
Wenn die Anfragemethode ein ungültiges Token ist oder eine der verbotenen Header ('CONNECT' , 'TRACE' oder 'TRACK' ) enthält. |
fetch('https://example.com/', { method: 'CONNECT' }); |
Wenn der Anfragemodus "no-cors" ist und die Anfragemethode keine CORS-sicheren Methoden ('GET' , 'HEAD' oder 'POST' ) verwendet. |
fetch('https://example.com/', { method: 'CONNECT', mode: 'no-cors', }); |
Wenn die Anfragemethode 'GET' oder 'HEAD' ist und der Body nicht null oder undefined ist. |
fetch('https://example.com/', { method: 'GET', body: new FormData(), }); |
Wenn fetch einen Netzwerkfehler auslöst. |
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 einer fetch()
-Anfrage ab. Da wir ein Bild abrufen, führen wir Response.blob()
auf die Antwort aus, um ihr den richtigen MIME-Typ zu geben, damit sie korrekt verarbeitet wird. Anschließend erstellen wir 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 mit init Beispiel (siehe Fetch Request init live) tun wir dasselbe, jedoch übergeben wir beim Aufruf von fetch()
ein options-Objekt. In diesem Fall können wir einen Cache-Control
-Wert setzen, um anzugeben, welche Arten von zwischengespeicherten Antworten akzeptabel 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 im Request
-Konstruktor übergeben, um den gleichen Effekt zu erzielen:
const req = new Request("flowers.jpg", options);
Sie können auch ein Objekt-Literal 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 |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fetch | ||||||||||||||
Authorization header removed from cross-origin redirects | ||||||||||||||
Support for blob: and data: | ||||||||||||||
Send ReadableStream in body | ||||||||||||||
init.attributionReporting parameter | ||||||||||||||
init.browsingTopics parameter | ||||||||||||||
init.duplex parameter | ||||||||||||||
init.keepalive parameter | ||||||||||||||
init.priority parameter | ||||||||||||||
init.referrerPolicy parameter | ||||||||||||||
init.signal parameter |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support
- No support
- No support
- Experimental. Expect behavior to change in the future.
- Non-standard. Check cross-browser support before using.
- See implementation notes.
- Has more compatibility info.