Fetch/XMLHttpRequest dalam TypeScript
Artikel ini menerangkan mengenai Fetch/XMLHttpRequest dalam TypeScript.
Anda boleh mempelajari cara untuk menggunakan Fetch API
dan XMLHttpRequest
, serta perbezaan antara kedua-duanya.
YouTube Video
Fetch/XMLHttpRequest dalam TypeScript
Dalam TypeScript, permintaan HTTP kebanyakannya dijalankan menggunakan dua API: Fetch API
dan XMLHttpRequest
. Dengan menggunakan TypeScript, anda boleh memperkenalkan semakan jenis untuk permintaan dan tindak balas semasa melaksanakan komunikasi tak segerak dengan API ini, membolehkan anda menulis kod yang lebih selamat. Di bawah, kami akan memperkenalkan cara menggunakan setiap satu.
Fetch API
Fetch API
ialah API berasaskan Promise yang digunakan untuk melaksanakan komunikasi tak segerak (permintaan HTTP) dengan cara yang ringkas. Dalam TypeScript, anda boleh membuat permintaan menggunakan kaedah fetch
dan memproses tindak balas dengan cara yang selamat jenis.
Penggunaan Asas
Di bawah adalah contoh asas menggunakan permintaan GET
.
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 });
- Kod ini menghantar permintaan
GET
ke URL yang ditetapkan, menganalisis respons yang diterima sebagai JSON, dan memaparkannya ke konsol.
Pengendalian data yang selamat jenis dalam TypeScript
Oleh kerana tindak balas daripada kaedah fetch
mempunyai jenis yang tidak jelas, anda boleh memanfaatkan semakan jenis TypeScript dengan secara jelas mentakrifkan jenis tindak balas.
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 });
- Kod ini menggunakan jenis
Post
untuk data yang diperoleh melaluifetch
, memproses respons dengan cara yang selamat jenis, dan memaparkan tajuk setiap kiriman ke konsol.
Contoh permintaan POST
Apabila menghantar data kepada pelayan, gunakan kaedah POST
. Untuk menghantar JSON dalam badan, tentukan headers
dan 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 });
- Kod ini menghantar data dalam format JSON ke pelayan dengan permintaan
POST
, menerima respons sebagai JSON, dan memaparkannya ke konsol.
Fetch
menggunakan fungsi tak segerak (async
/await
)
Dengan menggunakan async
/await
dalam TypeScript, anda boleh menulis pemprosesan tak segerak dengan lebih ringkas.
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();
- Kod ini mendapatkan data kiriman secara tak segerak menggunakan sintaks
async
/await
, memproses respons sebagai jenisPost[]
, dan memaparkannya ke konsol.
XMLHttpRequest
XMLHttpRequest
adalah API yang lebih lama dan agak lebih kompleks berbanding Fetch API
, tetapi ia mungkin digunakan apabila keserasian pelayar atau kawalan yang lebih maju diperlukan.
Penggunaan asas XMLHttpRequest
Di bawah adalah contoh menggunakan permintaan GET
.
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();
- Kod ini menghantar permintaan
GET
ke URL yang ditetapkan menggunakanXMLHttpRequest
, menganalisis respons sebagai JSON, dan memaparkannya ke konsol.
Contoh permintaan POST
Apabila menghantar data kepada pelayan, nyatakan POST
dalam kaedah open
dan hantar data dengan 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);
- Kod ini menghantar data dalam format JSON ke pelayan dengan permintaan
POST
menggunakanXMLHttpRequest
, dan memaparkan respons yang mengandungi data yang dicipta ke konsol.
Pengendalian ralat dengan XMLHttpRequest
Anda boleh mengendalikan ralat permintaan dengan menggunakan acara 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();
- Kod ini menjalankan permintaan
GET
denganXMLHttpRequest
, mengendalikan ralat permintaan denganonerror
, dan mencatat respons dengan sewajarnya bagi kejayaan dan kegagalan.
Perbandingan Fetch API dan XMLHttpRequest
Ciri | Fetch API | XMLHttpRequest |
---|---|---|
API Moden | ○ | × |
Sokongan Janji | ○ | × |
Kemudahan Membaca | Tinggi (berfungsi baik dengan async /await ) |
Rendah (banyak panggilan balik) |
Keserasian Penyemak Imbas | Tidak disokong dalam beberapa penyemak imbas lama | Disokong oleh semua penyemak imbas utama |
Penjejakan Kemajuan | △ (mungkin dengan ReadableStream ) |
○ (acara onprogress tersedia) |
Pengendalian Ralat | Ralat ditangkap dalam rantaian Janji | Perlu menggunakan onerror |
Ringkasan
Dalam TypeScript, anda boleh menulis permintaan tak segerak dengan ringkas dan selamat jenis dengan menggunakan Fetch API
. Sebaliknya, XMLHttpRequest
adalah API yang lebih lama tetapi masih boleh digunakan dalam situasi tertentu. Secara amnya, disarankan untuk menggunakan Fetch API
yang mudah dan moden, tetapi jika keserasian penyemak imbas atau penjejakan kemajuan diperlukan, XMLHttpRequest
juga boleh dipertimbangkan.
Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.