ดึงข้อมูล/XMLHttpRequest ใน TypeScript
บทความนี้อธิบายเกี่ยวกับ Fetch/XMLHttpRequest ใน TypeScript
คุณสามารถเรียนรู้เกี่ยวกับวิธีการใช้ Fetch API
และ XMLHttpRequest
รวมถึงความแตกต่างระหว่างทั้งสอง
YouTube Video
ดึงข้อมูล/XMLHttpRequest ใน TypeScript
ใน TypeScript การส่งคำขอ HTTP ส่วนใหญ่ดำเนินการผ่านสอง API: Fetch API
และ XMLHttpRequest
ด้วยการใช้ TypeScript คุณสามารถเพิ่มการตรวจสอบประเภทสำหรับคำขอและการตอบกลับในขณะสื่อสารแบบอะซิงโครนัสผ่าน API เหล่านี้ ซึ่งช่วยให้คุณเขียนโค้ดได้ปลอดภัยยิ่งขึ้น ด้านล่างนี้เราจะแนะนำวิธีการใช้งานแต่ละอย่าง
Fetch API
Fetch API
เป็น API ที่ใช้ Promise สำหรับการสื่อสารแบบอะซิงโครนัส (คำขอ HTTP) ได้อย่างง่ายดาย ใน TypeScript คุณสามารถส่งคำขอโดยใช้เมธอด fetch
และจัดการการตอบกลับได้อย่างปลอดภัยตามประเภท
การใช้งานพื้นฐาน
ด้านล่างนี้คือตัวอย่างเบื้องต้นในการใช้คำขอแบบ 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 });
- โค้ดนี้จะส่งคำขอ
GET
ไปยัง URL ที่ระบุไว้ แปลงผลตอบรับที่ได้รับเป็น JSON และแสดงผลลัพธ์ในคอนโซล
การจัดการข้อมูลที่ปลอดภัยตามประเภทใน TypeScript
เนื่องจากการตอบกลับจากเมธอด fetch
มีประเภทที่ไม่ชัดเจน คุณสามารถใช้การตรวจสอบประเภทของ TypeScript ได้โดยการกำหนดประเภทของการตอบกลับอย่างชัดเจน
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 });
- โค้ดนี้ใช้ชนิด
Post
กับข้อมูลที่ดึงมาด้วยfetch
ประมวลผลผลตอบสนองอย่างปลอดภัยตามประเภท และแสดงชื่อโพสต์แต่ละอันในคอนโซล
ตัวอย่างคำขอแบบ POST
เมื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ ให้ใช้เมธอด POST
เพื่อส่ง JSON ในเนื้อหา ควรระบุ headers
และ 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 });
- โค้ดนี้ส่งข้อมูลในรูปแบบ JSON ไปยังเซิร์ฟเวอร์ด้วยคำขอ
POST
รับผลตอบสนองเป็น JSON และแสดงผลลัพธ์ในคอนโซล
Fetch
การใช้งานฟังก์ชันอะซิงโครนัส (async
/await
)
ด้วยการใช้ async
/await
ใน TypeScript คุณสามารถเขียนการประมวลผลแบบอะซิงโครนัสได้อย่างง่ายดายยิ่งขึ้น
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();
- โค้ดนี้ดึงข้อมูลโพสต์แบบอะซิงโครนัสด้วยไวยากรณ์
async
/await
ประมวลผลผลตอบสนองในรูปแบบPost[]
และแสดงผลในคอนโซล
XMLHttpRequest
XMLHttpRequest
เป็น API ที่เก่ากว่าและซับซ้อนกว่าเล็กน้อยเมื่อเทียบกับ Fetch API
แต่ยังสามารถใช้ได้หากจำเป็นต้องมีการรองรับเบราว์เซอร์หรือการควบคุมที่ซับซ้อนมากขึ้น
การใช้งานพื้นฐานของ XMLHttpRequest
ด้านล่างนี้คือตัวอย่างการใช้คำขอแบบ 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();
- โค้ดนี้ส่งคำขอ
GET
ไปยัง URL ที่ระบุโดยใช้XMLHttpRequest
แปลงผลตอบรับเป็น JSON และแสดงผลในคอนโซล
ตัวอย่างคำขอแบบ POST
เมื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ ให้ระบุ POST
ในเมธอด open
และส่งข้อมูลด้วย 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);
- โค้ดนี้ส่งข้อมูลในรูปแบบ JSON ไปยังเซิร์ฟเวอร์ด้วยคำขอ
POST
ผ่านXMLHttpRequest
และแสดงผลตอบสนองที่มีข้อมูลที่สร้างขึ้นในคอนโซล
การจัดการข้อผิดพลาดด้วย XMLHttpRequest
คุณสามารถจัดการข้อผิดพลาดของคำขอโดยการใช้ event 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();
- โค้ดนี้รันคำขอ
GET
ผ่านXMLHttpRequest
จัดการข้อผิดพลาดของคำขอด้วยonerror
และบันทึกผลตอบสนองอย่างถูกต้องทั้งในกรณีที่สำเร็จและล้มเหลว
การเปรียบเทียบ Fetch API และ XMLHttpRequest
คุณสมบัติ | Fetch API | XMLHttpRequest |
---|---|---|
API สมัยใหม่ | ○ | × |
การสนับสนุน Promise | ○ | × |
ความสามารถในการอ่าน | สูง (ทำงานได้ดีร่วมกับ async /await ) |
ต่ำ (มีการใช้ callbacks มาก) |
ความเข้ากันได้ของเบราว์เซอร์ | ไม่รองรับในเบราว์เซอร์เก่าบางรายการ | รองรับโดยเบราว์เซอร์หลักทั้งหมด |
การติดตามความคืบหน้า | △ (สามารถทำได้ด้วย ReadableStream ) |
○ (รองรับเหตุการณ์ onprogress ) |
การจัดการข้อผิดพลาด | ข้อผิดพลาดจะถูกจัดการในเชนของ Promise | จำเป็นต้องใช้ onerror |
สรุป
ใน TypeScript คุณสามารถเขียนคำขอแบบอะซิงโครนัสให้กระชับและมีความปลอดภัยในประเภทได้โดยใช้ Fetch API
ในทางตรงกันข้าม XMLHttpRequest
เป็น API รุ่นเก่ากว่า แต่ยังคงสามารถใช้งานได้ในบางสถานการณ์ โดยทั่วไป แนะนำให้ใช้ Fetch API
ที่เรียบง่ายและทันสมัย แต่หากจำเป็นต้องมีความเข้ากันได้กับเบราว์เซอร์หรือการติดตามความคืบหน้า คุณสามารถพิจารณาใช้ XMLHttpRequest
ได้
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย