Fetch/XMLHttpRequest i TypeScript
Denne artikel forklarer Fetch/XMLHttpRequest i TypeScript.
Du kan lære om, hvordan man bruger Fetch API
og XMLHttpRequest
, samt deres forskelle.
YouTube Video
Fetch/XMLHttpRequest i TypeScript
I TypeScript udføres HTTP-forespørgsler primært ved hjælp af to API'er: Fetch API
og XMLHttpRequest
. Ved at bruge TypeScript kan du indføre typekontrol for forespørgsler og svar, når du udfører asynkron kommunikation med disse API'er, hvilket giver dig mulighed for at skrive mere sikker kode. Nedenfor vil vi introducere, hvordan man bruger hver af dem.
Fetch API
Fetch API
er et Promise-baseret API, der bruges til at udføre asynkron kommunikation (HTTP-forespørgsler) på en enkel måde. I TypeScript kan du foretage forespørgsler ved hjælp af fetch
-metoden og behandle svar på en type-sikker måde.
Grundlæggende Brug
Nedenfor er et grundlæggende eksempel, der bruger en GET
-forespørgsel.
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 });
- Denne kode sender en
GET
-anmodning til den angivne URL, fortolker det modtagne svar som JSON, og viser det i konsollen.
Type-sikker datahåndtering i TypeScript
Da svaret fra fetch
-metoden har en uklar type, kan du udnytte TypeScripts typekontrol ved eksplicit at definere svartypen.
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 });
- Denne kode anvender
Post
-typen på de data, der hentes medfetch
, behandler svaret typesikkert og viser titlen på hvert indlæg i konsollen.
Eksempel på en POST
-forespørgsel
Når du sender data til serveren, skal du bruge POST
-metoden. For at sende JSON i indholdet skal du angive headers
og 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 });
- Denne kode sender data i JSON-format til serveren med en
POST
-anmodning, modtager svaret som JSON, og viser det i konsollen.
Fetch
ved hjælp af asynkrone funktioner (async
/await
)
Ved at bruge async
/await
i TypeScript kan du skrive asynkron behandling på en enklere måde.
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();
- Denne kode henter postdata asynkront ved hjælp af
async
/await
-syntaksen, behandler svaret som enPost[]
-type, og viser det i konsollen.
XMLHttpRequest
XMLHttpRequest
er en ældre API og er noget mere kompleks sammenlignet med Fetch API
, men den kan bruges, når browserkompatibilitet eller mere avanceret kontrol er nødvendig.
Grundlæggende brug af XMLHttpRequest
Nedenfor er et eksempel, der bruger en GET
-forespørgsel.
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();
- Denne kode sender en
GET
-anmodning til den angivne URL medXMLHttpRequest
, fortolker svaret som JSON, og viser det i konsollen.
Eksempel på en POST
-forespørgsel
Når du sender data til serveren, skal du angive POST
i open
-metoden og sende data med 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);
- Denne kode sender data i JSON-format til serveren med en
POST
-anmodning viaXMLHttpRequest
, og viser svaret, der indeholder de oprettede data, i konsollen.
Fejlhåndtering med XMLHttpRequest
Du kan håndtere forespørgselsfejl ved at bruge onerror
-hændelsen.
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();
- Denne kode udfører en
GET
-anmodning medXMLHttpRequest
, håndterer anmodningsfejl medonerror
og logger svaret korrekt både ved succes og fejl.
Sammenligning af Fetch API og XMLHttpRequest
Funktion | Fetch API | XMLHttpRequest |
---|---|---|
Moderne API | ○ | × |
Løfteunderstøttelse | ○ | × |
Læsbarhed | Høj (fungerer godt med async /await ) |
Lav (mange callbacks) |
Browserkompatibilitet | Ikke understøttet i nogle ældre browsere | Understøttet af alle større browsere |
Fremskridtsovervågning | △ (muligt med ReadableStream ) |
○ (onprogress -hændelse tilgængelig) |
Fejlhåndtering | Fejl fanges i løftekæden | Skal bruge onerror |
Sammendrag
I TypeScript kan du skrive asynkrone forespørgsler kortfattet og type-sikkert ved hjælp af Fetch API
. På den anden side er XMLHttpRequest
en ældre API, men den kan stadig bruges i visse situationer. Generelt anbefales det at bruge den enkle og moderne Fetch API
, men hvis browserkompatibilitet eller fremskridtsovervågning er nødvendig, kan XMLHttpRequest
også overvejes.
Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.