Hướng Dẫn Sử Dụng Fetch trong JavaScript
Giới thiệu
fetch là một hàm tích hợp sẵn trong JavaScript được sử dụng để thực hiện các yêu cầu mạng, chẳng hạn như lấy dữ liệu từ API hoặc gửi dữ liệu đến máy chủ. Nó giúp đơn giản hóa việc xử lý các tác vụ bất đồng bộ so với các phương pháp cũ hơn như XMLHttpRequest.
Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về fetch, cú pháp cơ bản, cách sử dụng cho các yêu cầu GET và POST, cũng như những lưu ý quan trọng khi sử dụng hàm này.
Cú Pháp Cơ Bản
Cú pháp cơ bản của fetch như sau:
javascript
fetch(url, options)
.then(response => response.json()) // Chuyển đổi phản hồi sang JSON
.then(data => console.log(data)) // Làm việc với dữ liệu
.catch(error => console.error('Error:', error));
//url → địa chỉ của tài nguyên (điểm cuối API, tệp, vv).
//options → đối tượng tùy chọn để cấu hình yêu cầu (phương thức, tiêu đề, body).
Ví dụ Cơ Bản
Dưới đây là một ví dụ cơ bản về cách sử dụng fetch:
Yêu Cầu GET
javascript
fetch("https://jsonplaceholder.typicode.com/posts/1")
.then(response => response.json())
.then(data => console.log(data));
Yêu Cầu POST
javascript
fetch("https://jsonplaceholder.typicode.com/posts", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
title: "Xin chào",
body: "Đây là một bài kiểm tra",
userId: 1
})
})
.then(response => response.json())
.then(data => console.log(data));
Đặc Điểm Nổi Bật của Fetch
fetchlà bất đồng bộ (non-blocking).- Luôn trả về một Promise.
- So với
XMLHttpRequest,fetchđơn giản và hiện đại hơn. - Các lỗi như URL sai hoặc mất kết nối internet sẽ kích hoạt
.catch().
So Sánh Fetch và XMLHttpRequest
| Đặc điểm | Fetch | XMLHttpRequest |
|---|---|---|
| Cách tiếp cận | Dựa trên Promise (sạch hơn, dễ dàng nối tiếp với .then() / async-await) | Dựa trên callback (có thể gây rối với callback lồng nhau) |
| Độ dài mã | Ngắn gọn và đơn giản | Cồng kềnh và khó đọc |
| Phương thức | Cung cấp các phương thức tiện lợi như .json(), .text(), .blob() | Phải phân tích responseText thủ công |
| Xử lý lỗi | Lỗi mạng kích hoạt .catch(), nhưng lỗi HTTP (như 404/500) cần xử lý thủ công | Phải kiểm tra xhr.status và onerror |
| Hỗ trợ streaming | Có | Không |
| Tương thích trình duyệt | Các trình duyệt hiện đại (không hỗ trợ IE) | Hoạt động ngay cả trên trình duyệt cũ (như IE5+) |
Thực Tiễn Tốt Nhất Khi Sử Dụng Fetch
- Kiểm Tra Phản Hồi: Luôn kiểm tra phản hồi từ máy chủ để đảm bảo rằng không có lỗi. Bạn có thể kiểm tra mã trạng thái HTTP để xác minh rằng yêu cầu đã thành công trước khi xử lý dữ liệu.
javascript
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
return response.json();
})
.then(data => console.log(data))
.catch(error => console.error('Fetch error:', error));
- Xử Lý Lỗi: Sử dụng
.catch()để xử lý các lỗi có thể xảy ra. Điều này giúp đảm bảo rằng ứng dụng của bạn không bị treo khi xảy ra lỗi. - Sử Dụng Async/Await: Nếu bạn muốn mã trở nên rõ ràng hơn, bạn có thể sử dụng cú pháp
async/awaitđể làm cho mã của bạn trông giống như mã đồng bộ.
javascript
async function fetchData() {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Fetch error:', error);
}
}
Những Cạm Bẫy Thường Gặp
- Không Xử Lý Lỗi HTTP: Nhiều nhà phát triển thường quên xử lý các lỗi HTTP như 404 hoặc 500. Điều này có thể dẫn đến trải nghiệm người dùng kém.
- Quên Cấu Hình Tiêu Đề: Khi gửi dữ liệu, hãy chắc chắn rằng bạn đã cấu hình tiêu đề
Content-Typeđúng cách. - Không Kiểm Tra Kết Quả Phản Hồi: Đảm bảo rằng bạn không giả định dữ liệu luôn có sẵn mà không kiểm tra.
Mẹo Tối Ưu Hiệu Suất
- Sử Dụng Batching: Nếu bạn cần gửi nhiều yêu cầu, hãy xem xét việc gộp chúng lại để giảm số lần gọi mạng.
- Caching: Sử dụng caching để giảm thiểu số lượng yêu cầu tới máy chủ.
- Theo Dõi Hiệu Suất: Sử dụng các công cụ như Chrome DevTools để theo dõi hiệu suất của các yêu cầu
fetchcủa bạn.
Kết Luận
Hàm fetch trong JavaScript là một công cụ mạnh mẽ giúp đơn giản hóa việc thực hiện các yêu cầu mạng. Với cú pháp dễ hiểu và khả năng xử lý bất đồng bộ tốt, fetch là lựa chọn lý tưởng cho các nhà phát triển hiện đại. Hãy nhớ áp dụng các thực tiễn tốt nhất và tránh những cạm bẫy thường gặp để tận dụng tối đa chức năng của fetch.
Nếu bạn muốn tìm hiểu thêm về JavaScript và các công nghệ liên quan, hãy theo dõi các bài viết khác trên blog của chúng tôi!