Hämta/XMLHttpRequest i TypeScript
Den här artikeln förklarar Hämta/XMLHttpRequest i TypeScript.
Du kan lära dig hur du använder Fetch API
och XMLHttpRequest
samt deras skillnader.
YouTube Video
Hämta/XMLHttpRequest i TypeScript
I TypeScript görs HTTP-förfrågningar huvudsakligen med hjälp av två API:er: Fetch API
och XMLHttpRequest
. Genom att använda TypeScript kan du införa typkontroll för förfrågningar och svar vid asynkron kommunikation med dessa API:er, vilket gör det möjligt att skriva säkrare kod. Nedan kommer vi att introducera hur man använder var och en av dem.
Fetch API
Fetch API
är ett API baserat på Promise som används för att enkelt utföra asynkron kommunikation (HTTP-förfrågningar). I TypeScript kan du göra förfrågningar med metod fetch
och bearbeta svar på ett typsäkert sätt.
Grundläggande användning
Nedan är ett grundläggande exempel som använder en GET
-förfrågan.
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 });
- Den här koden skickar en
GET
-begäran till den angivna URL:en, tolkar det mottagna svaret som JSON och skriver ut det i konsolen.
Typsäker datahantering i TypeScript
Eftersom svaret från metoden fetch
har en oklar typ, kan du använda TypeScripts typkontroll genom att uttryckligen definiera svarstypen.
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 });
- Den här koden tillämpar typen
Post
på den data som hämtas medfetch
, behandlar svaret på ett typesäkert sätt och skriver ut titeln på varje inlägg i konsolen.
Exempel på en POST
-förfrågan
När du skickar data till servern, använd metoden POST
. För att skicka JSON i kroppen, specificera headers
och 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 });
- Den här koden skickar data i JSON-format till servern med en
POST
-begäran, tar emot svaret som JSON och skriver ut det i konsolen.
Fetch
med asynkrona funktioner (async
/await
)
Genom att använda async
/await
i TypeScript kan du skriva asynkron bearbetning på ett enklare sätt.
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();
- Den här koden hämtar asynkront inläggsdata med hjälp av
async
/await
-syntaxen, bearbetar svaret som enPost[]
-typ och skriver ut det i konsolen.
XMLHttpRequest
XMLHttpRequest
är ett äldre API och är något mer komplext jämfört med Fetch API
, men kan användas när webbläsarkompatibilitet eller mer avancerad kontroll är nödvändig.
Grundläggande användning av XMLHttpRequest
Nedan är ett exempel som använder en GET
-förfrågan.
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();
- Den här koden skickar en
GET
-begäran till den angivna URL:en medXMLHttpRequest
, tolkar svaret som JSON och skriver ut det i konsolen.
Exempel på en POST
-förfrågan
När du skickar data till servern, specificera POST
i metoden open
och skicka 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);
- Den här koden skickar data i JSON-format till servern med en
POST
-begäran viaXMLHttpRequest
och skriver ut svaret som innehåller den skapade datan i konsolen.
Felfunktionalitet med XMLHttpRequest
Du kan hantera förfrågningsfel genom att använda händelsen onerror
.
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();
- Den här koden utför en
GET
-begäran medXMLHttpRequest
, hanterar begärans fel medonerror
och loggar svaret korrekt både vid framgång och misslyckande.
Jämförelse av Fetch API och XMLHttpRequest
Funktion | Fetch API | XMLHttpRequest |
---|---|---|
Modernt API | ○ | × |
Löfte Stöd | ○ | × |
Läslighet | Hög (fungerar bra med async /await ) |
Låg (många återanrop) |
Webbläsarkompatibilitet | Inte stödd i vissa äldre webbläsare | Stöds av alla större webbläsare |
Framstegsspårning | △ (möjligt med ReadableStream ) |
○ (onprogress -händelse tillgänglig) |
Felfångst | Fel fångas i löfteskedjan (Promise ) |
Behöver använda onerror |
Sammanfattning
I TypeScript kan du skriva asynkrona förfrågningar koncist och typesäker kod med hjälp av Fetch API
. Å andra sidan är XMLHttpRequest
ett äldre API, men det kan fortfarande användas i vissa situationer. Generellt rekommenderas det att använda den enkla och moderna Fetch API
, men om webbläsarkompatibilitet eller framstegsspårning behövs kan även XMLHttpRequest
övervägas.
Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.