Fetch/XMLHttpRequest in TypeScript
Dieser Artikel erklärt Fetch/XMLHttpRequest in TypeScript.
Sie können lernen, wie man die Fetch API
und XMLHttpRequest
verwendet und welche Unterschiede sie haben.
YouTube Video
Fetch/XMLHttpRequest in TypeScript
In TypeScript werden HTTP-Anfragen hauptsächlich über zwei APIs durchgeführt: Fetch API
und XMLHttpRequest
. Durch die Verwendung von TypeScript können Sie für Anfragen und Antworten bei der asynchronen Kommunikation mit diesen APIs Typüberprüfungen einführen, sodass Sie sichereren Code schreiben können. Im Folgenden wird erläutert, wie jede dieser APIs verwendet wird.
Fetch API
Die Fetch API
ist eine auf Promises basierende API, die eine einfache Durchführung von asynchroner Kommunikation (HTTP-Anfragen) ermöglicht. In TypeScript können Sie Anfragen mit der Methode fetch
durchführen und die Antworten typensicher verarbeiten.
Grundlegende Verwendung
Nachfolgend ein einfaches Beispiel mit einer GET
-Anfrage.
1const url = 'https://jsonplaceholder.typicode.com/posts';
2
3fetch(url)
4 .then(response => {
5 if (!response.ok) {
6 throw new Error('Network response was not ok');
7 }
8 return response.json(); // Parse the response as JSON
9 })
10 .then(data => {
11 console.log(data);
12 })
13 .catch(error => {
14 console.error('Fetch error:', error);
15 });
- Dieser Code sendet eine
GET
-Anfrage an die angegebene URL, parst die empfangene Antwort als JSON und gibt sie in der Konsole aus.
Typensichere Datenverarbeitung in TypeScript
Da die Antwort der Methode fetch
einen unklaren Typ hat, können Sie mit TypeScript eine Typüberprüfung vornehmen, indem Sie den Antworttyp explizit definieren.
1// Define the type for the response data
2interface Post {
3 userId: number;
4 id: number;
5 title: string;
6 body: string;
7}
8
9const url = 'https://jsonplaceholder.typicode.com/posts';
10
11fetch(url)
12 .then(response => response.json())
13 .then((data: Post[]) => {
14 data.forEach(post => {
15 console.log(`Title: ${post.title}`);
16 });
17 })
18 .catch(error => {
19 console.error('Error fetching data:', error);
20 });
- Dieser Code wendet den Typ
Post
auf die mitfetch
abgerufenen Daten an, verarbeitet die Antwort typsicher und gibt den Titel jedes Beitrags in der Konsole aus.
Beispiel für eine POST
-Anfrage
Wenn Daten an den Server gesendet werden sollen, verwenden Sie die Methode POST
. Um JSON im Body zu senden, müssen headers
und body
angegeben werden.
1const postData = {
2 title: 'foo',
3 body: 'bar',
4 userId: 1
5};
6
7fetch('https://jsonplaceholder.typicode.com/posts', {
8 method: 'POST',
9 headers: {
10 'Content-Type': 'application/json'
11 },
12 body: JSON.stringify(postData)
13 })
14 .then(response => response.json())
15 .then(data => {
16 console.log('Created post:', data);
17 })
18 .catch(error => {
19 console.error('Error posting data:', error);
20 });
- Dieser Code sendet Daten im JSON-Format mit einer
POST
-Anfrage an den Server, empfängt die Antwort als JSON und gibt sie in der Konsole aus.
Fetch
mit asynchronen Funktionen (async
/await
)
Durch die Verwendung von async
/await
in TypeScript können Sie asynchrone Prozesse einfacher schreiben.
1// Define the type for the response data
2interface Post {
3 userId: number;
4 id: number;
5 title: string;
6 body: string;
7}
8
9async function fetchPosts() {
10 try {
11 const response = await fetch('https://jsonplaceholder.typicode.com/posts');
12 if (!response.ok) {
13 throw new Error('Network response was not ok');
14 }
15 const data: Post[] = await response.json();
16 console.log(data);
17 } catch (error) {
18 console.error('Fetch error:', error);
19 }
20}
21
22fetchPosts();
- Dieser Code ruft asynchron Beitragsdaten mit der
async
/await
-Syntax ab, verarbeitet die Antwort alsPost[]
-Typ und gibt sie in der Konsole aus.
XMLHttpRequest
XMLHttpRequest
ist eine ältere API und im Vergleich zur Fetch API
etwas komplexer, aber sie kann verwendet werden, wenn Browserkompatibilität oder eine umfangreichere Steuerung erforderlich ist.
Grundlegende Verwendung von XMLHttpRequest
Nachfolgend ein Beispiel mit einer GET
-Anfrage.
1const xhr = new XMLHttpRequest();
2xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts', true);
3
4xhr.onreadystatechange = function () {
5 if (xhr.readyState === 4 && xhr.status === 200) {
6 const data = JSON.parse(xhr.responseText);
7 console.log(data);
8 }
9};
10
11xhr.send();
- Dieser Code sendet eine
GET
-Anfrage an die angegebene URL mitXMLHttpRequest
, parst die Antwort als JSON und gibt sie in der Konsole aus.
Beispiel für eine POST
-Anfrage
Um Daten an den Server zu senden, geben Sie in der Methode open
POST
an und senden die Daten mit send
.
1const xhr = new XMLHttpRequest();
2xhr.open('POST', 'https://jsonplaceholder.typicode.com/posts', true);
3xhr.setRequestHeader('Content-Type', 'application/json');
4
5const postData = JSON.stringify({
6 title: 'foo',
7 body: 'bar',
8 userId: 1
9});
10
11xhr.onreadystatechange = function () {
12 if (xhr.readyState === 4 && xhr.status === 201) {
13 console.log('Created post:', xhr.responseText);
14 }
15};
16
17xhr.send(postData);
- Dieser Code sendet Daten im JSON-Format mit einer
POST
-Anfrage unter Verwendung vonXMLHttpRequest
an den Server und gibt die Antwort mit den erstellten Daten in der Konsole aus.
Fehlerbehandlung mit XMLHttpRequest
Sie können Anfragenfehler mit dem Event onerror
behandeln.
1const xhr = new XMLHttpRequest();
2xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts', true);
3
4xhr.onerror = function () {
5 console.error('Request failed');
6};
7
8xhr.onload = function () {
9 if (xhr.status === 200) {
10 console.log('Response:', xhr.responseText);
11 } else {
12 console.error('Error:', xhr.status);
13 }
14};
15
16xhr.send();
- Dieser Code führt eine
GET
-Anfrage mitXMLHttpRequest
aus, behandelt Anforderungsfehler mitonerror
und protokolliert die Antwort sowohl bei Erfolg als auch bei Fehlern angemessen.
Vergleich zwischen Fetch API und XMLHttpRequest
Funktion | Fetch API | XMLHttpRequest |
---|---|---|
Moderne API | ○ | × |
Versprechen-Unterstützung | ○ | × |
Lesbarkeit | Hoch (funktioniert gut mit async /await ) |
Niedrig (viele Rückrufe) |
Browser-Kompatibilität | In einigen älteren Browsern nicht unterstützt | Unterstützung durch alle gängigen Browser |
Fortschrittsverfolgung | △ (möglich mit ReadableStream ) |
○ (onprogress -Ereignis verfügbar) |
Fehlerbehandlung | Fehler werden in der Promise-Kette abgefangen | Verwendung von onerror erforderlich |
Zusammenfassung
In TypeScript können Sie asynchrone Anfragen prägnant und typsicher mit der Fetch API
schreiben. Andererseits ist XMLHttpRequest
eine ältere API, kann aber in bestimmten Situationen weiterhin verwendet werden. Im Allgemeinen wird empfohlen, die einfache und moderne Fetch API
zu verwenden, aber wenn Browser-Kompatibilität oder Fortschrittsverfolgung erforderlich ist, kann auch XMLHttpRequest
in Betracht gezogen werden.
Sie können den obigen Artikel mit Visual Studio Code auf unserem YouTube-Kanal verfolgen. Bitte schauen Sie sich auch den YouTube-Kanal an.