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.
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 mit dem Response
Objekt aufgelöst, das die Antwort auf Ihre Anfrage darstellt.
Ein fetch()
-Promise wird nur abgelehnt, wenn die Anfrage fehlschlägt, zum Beispiel wegen einer schlecht formatierten Anfrages-URL oder einem Netzwerkfehler.
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 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 abgerufen werden.
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, die in einem Fensterkontext dasbaseURI
des Dokuments 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 abgebrochen aufgrund eines Aufrufs der
AbortController
abort()
Methode. NotAllowedError
DOMException
-
Wird ausgelöst, wenn die Verwendung der Topics API ausdrücklich durch eine
browsing-topics
Berechtigungsrichtlinie untersagt ist und einefetch()
-Anfrage mitbrowsingTopics: true
durchgeführt wurde. TypeError
-
Kann aus folgenden Gründen auftreten:
Grund | Fehlgeschlagene Beispiele |
---|---|
Durch eine Berechtigungspolicy blockiert | Die Verwendung der Attribution Reporting API ist durch eine attribution-reporting Permissions-Policy blockiert, und eine fetch() -Anfrage wurde mit attributionReporting angegeben. |
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, oder die Verwendung eines Schemas, das von fetch nicht unterstützt wird, oder die Verwendung eines Schemas, das für einen bestimmten Anfragemodus nicht unterstützt wird. |
fetch('blob://example.com/', { mode: 'cors' }); |
URL enthält Anmeldeinformationen. |
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 Request-Cache-Modus "only-if-cached" ist und der Anfragemodus anders als "same-origin" ist. |
fetch('https://example.com/', { cache: 'only-if-cached', mode: 'no-cors', }); |
Wenn die Anfragemethode ein ungültiger Name-Token oder einer der verbotenen Header ist
('CONNECT' , 'TRACE' oder 'TRACK' ).
|
fetch('https://example.com/', { method: 'CONNECT' }); |
Wenn der Anfragemodus "no-cors" ist und die Anfragemethode keine CORS-sichere Methode ist
('GET' , 'HEAD' oder 'POST' ).
|
fetch('https://example.com/', { method: 'CONNECT', mode: 'no-cors', }); |
Wenn die Anfragemethode 'GET' oder 'HEAD' ist und der Body nicht null oder undefiniert 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 einem fetch()
-Aufruf ab. Da wir ein Bild abrufen, führen wir Response.blob()
aus, um den richtigen MIME-Typ zu vergeben, damit es korrekt verarbeitet wird. Anschließend erstellen wir 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) 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, mit welcher 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 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);
Spezifikationen
Specification |
---|
Fetch Standard # fetch-method |
Browser-Kompatibilität
BCD tables only load in the browser