Hente/XMLHttpRequest i TypeScript
Denne artikkelen forklarer Hente/XMLHttpRequest i TypeScript.
Du kan lære hvordan du bruker Fetch API
og XMLHttpRequest
, samt forskjellene mellom dem.
YouTube Video
Hente/XMLHttpRequest i TypeScript
I TypeScript utføres HTTP-forespørsler hovedsakelig ved hjelp av to API-er: Fetch API
og XMLHttpRequest
. Ved å bruke TypeScript kan du innføre typekontroll for forespørsler og svar når du utfører asynkron kommunikasjon med disse API-ene, noe som lar deg skrive sikrere kode. Nedenfor vil vi introdusere hvordan du bruker hver av dem.
Fetch API
Fetch API
er et Promise-basert API som brukes til å enkelt utføre asynkron kommunikasjon (HTTP-forespørsler). I TypeScript kan du gjøre forespørsler ved å bruke fetch
-metoden og behandle svar på en typesikker måte.
Grunnleggende bruk
Nedenfor er et grunnleggende eksempel på en GET
-forespørsel.
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 koden sender en
GET
-forespørsel til den spesifiserte URL-en, analyserer det mottatte svaret som JSON, og skriver det ut til konsollen.
Typesikker databehandling i TypeScript
Siden svaret fra fetch
-metoden har en uklar type, kan du bruke TypeScripts typekontroll ved å eksplisitt 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 koden bruker
Post
-typen på dataene hentet medfetch
, behandler svaret typesikkert, og skriver ut tittelen på hvert innlegg til konsollen.
Eksempel på en POST
-forespørsel
Når du sender data til serveren, bruk POST
-metoden. For å sende JSON i kroppen, spesifiser 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 koden sender data i JSON-format til serveren med en
POST
-forespørsel, mottar svaret som JSON, og skriver det ut til konsollen.
Fetch
ved bruk av asynkrone funksjoner (async
/await
)
Ved å bruke async
/await
i TypeScript kan du skrive asynkron behandling på en enklere måte.
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 koden henter innlegg-data asynkront ved å bruke
async
/await
-syntaksen, behandler svaret som enPost[]
-type, og skriver det ut til konsollen.
XMLHttpRequest
XMLHttpRequest
er et eldre API og er noe mer komplekst sammenlignet med Fetch API
, men det kan brukes når nettleserkompatibilitet eller mer avansert kontroll er nødvendig.
Grunnleggende bruk av XMLHttpRequest
Nedenfor er et eksempel på en GET
-forespørsel.
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 koden sender en
GET
-forespørsel til den spesifiserte URL-en ved hjelp avXMLHttpRequest
, analyserer svaret som JSON, og skriver det ut til konsollen.
Eksempel på en POST
-forespørsel
Når du sender data til serveren, spesifiser POST
i open
-metoden og send 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 koden sender data i JSON-format til serveren med en
POST
-forespørsel ved bruk avXMLHttpRequest
, og skriver ut svaret som inneholder de opprettede dataene til konsollen.
Feilhåndtering med XMLHttpRequest
Du kan håndtere forespørselsfeil ved å bruke onerror
-hendelsen.
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 koden utfører en
GET
-forespørsel medXMLHttpRequest
, håndterer forespørselsfeil medonerror
, og logger svaret hensiktsmessig både ved suksess og feil.
Sammenligning av Fetch API og XMLHttpRequest
Funksjon | Fetch API | XMLHttpRequest |
---|---|---|
Moderne API | ○ | × |
Løftestøtte | ○ | × |
Lesbarhet | Høy (fungerer godt med async /await ) |
Lav (mange tilbakekall) |
Nettleserkompatibilitet | Ikke støttet i noen eldre nettlesere | Støttet av alle store nettlesere |
Fremdriftssporing | △ (mulig med ReadableStream ) |
○ (onprogress -hendelse tilgjengelig) |
Feilhåndtering | Feil fanges i løftekjeden | Må bruke onerror |
Sammendrag
I TypeScript kan du skrive asynkrone forespørsler kortfattet og typesikkert ved å bruke Fetch API
. På den annen side er XMLHttpRequest
en eldre API, men kan fortsatt brukes i visse situasjoner. Generelt anbefales det å bruke den enkle og moderne Fetch API
, men hvis nettleserkompatibilitet eller fremdriftssporing er nødvendig, kan også XMLHttpRequest
vurderes.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.