Fetch/XMLHttpRequest in TypeScript
Dit artikel legt Fetch/XMLHttpRequest uit in TypeScript.
Je kunt leren hoe je de Fetch API
en XMLHttpRequest
kunt gebruiken, evenals de verschillen ertussen.
YouTube Video
Fetch/XMLHttpRequest in TypeScript
In TypeScript worden HTTP-verzoeken voornamelijk uitgevoerd met behulp van twee API's: Fetch API
en XMLHttpRequest
. Door TypeScript te gebruiken, kun je typecontrole introduceren voor verzoeken en reacties bij het uitvoeren van asynchrone communicatie met deze API's, waardoor je veiliger code kunt schrijven. Hieronder bespreken we hoe je elk van deze kunt gebruiken.
Fetch API
De Fetch API
is een op Promises gebaseerde API die wordt gebruikt om eenvoudig asynchrone communicatie (HTTP-verzoeken) uit te voeren. In TypeScript kun je verzoeken uitvoeren met de fetch
-methode en reacties verwerken op een typeveilige manier.
Basisgebruik
Hieronder staat een eenvoudig voorbeeld met een GET
-verzoek.
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 });
- Deze code stuurt een
GET
verzoek naar de opgegeven URL, analyseert het ontvangen antwoord als JSON en toont het in de console.
Type-veilige gegevensverwerking in TypeScript
Omdat de reactie van de fetch
-methode een onduidelijk type heeft, kun je gebruikmaken van TypeScript's typecontrole door het reactietype expliciet te definiëren.
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 });
- Deze code past het
Post
type toe op de gegevens die metfetch
zijn opgehaald, verwerkt het antwoord op type-veilige wijze en toont de titel van elke post in de console.
Voorbeeld van een POST
-verzoek
Gebruik de POST
-methode bij het verzenden van gegevens naar de server. Om JSON in de body te verzenden, specificeer je headers
en body
.
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 });
- Deze code stuurt gegevens in JSON-formaat naar de server met een
POST
verzoek, ontvangt het antwoord als JSON en toont het in de console.
Fetch
met behulp van asynchrone functies (async
/await
)
Door async
/await
in TypeScript te gebruiken, kun je asynchrone verwerking eenvoudiger schrijven.
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();
- Deze code haalt asynchroon postgegevens op met behulp van de
async
/await
-syntaxis, verwerkt het antwoord als eenPost[]
type en toont het in de console.
XMLHttpRequest
XMLHttpRequest
is een oudere API en is enigszins complexer in vergelijking met de Fetch API
, maar kan worden gebruikt wanneer browsercompatibiliteit of meer geavanceerde controle nodig is.
Basisgebruik van XMLHttpRequest
Hieronder staat een voorbeeld van een GET
-verzoek.
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();
- Deze code stuurt een
GET
verzoek naar de opgegeven URL metXMLHttpRequest
, analyseert het antwoord als JSON en toont het in de console.
Voorbeeld van een POST
-verzoek
Bij het verzenden van gegevens naar de server geef je POST
op in de open
-methode en verzend je gegevens met 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);
- Deze code verstuurt gegevens in JSON-formaat naar de server met een
POST
verzoek viaXMLHttpRequest
en toont het antwoord met de aangemaakte gegevens in de console.
Foutafhandeling met XMLHttpRequest
Je kunt verzoekfouten afhandelen met behulp van het onerror
-event.
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();
- Deze code voert een
GET
verzoek uit metXMLHttpRequest
, behandelt verzoekfouten metonerror
en registreert het antwoord op de juiste manier bij zowel succes als falen.
Vergelijking van Fetch API en XMLHttpRequest
Functie | Fetch API | XMLHttpRequest |
---|---|---|
Moderne API | ○ | × |
Ondersteuning van Promises | ○ | × |
Leesbaarheid | Hoog (werkt goed met async /await ) |
Laag (veel callbacks) |
Browsercompatibiliteit | Niet ondersteund in sommige oudere browsers | Ondersteund door alle grote browsers |
Voortgang Bijhouden | △ (mogelijk met ReadableStream ) |
○ (onprogress event beschikbaar) |
Foutafhandeling | Fouten worden opgevangen in de Promise-keten | onerror moet worden gebruikt |
Samenvatting
In TypeScript kun je asynchrone verzoeken bondig en type-veilig schrijven met behulp van de Fetch API
. Aan de andere kant is XMLHttpRequest
een oudere API, maar kan deze nog steeds in bepaalde situaties worden gebruikt. Over het algemeen wordt aanbevolen om de eenvoudige en moderne Fetch API
te gebruiken, maar als browsercompatibiliteit of voortgangsbewaking nodig is, kan XMLHttpRequest
ook worden overwogen.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.