Fetch API: GET, POST, PUT และ DELETE
ส่งคำขอ GET ด้วย fetch ส่งเนื้อหา JSON ในคำขอ POST และ PUT และเรียกปลายทาง DELETE เพื่อลบทรัพยากร
Fetch API: GET, POST, PUT และ DELETE เป็นบทเรียน Frontend Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Frontend Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
API สำหรับดึงข้อมูล
fetch() คือ api สมัยใหม่ของเบราว์เซอร์สำหรับคำขอผ่านเครือข่าย โดยคืนค่าเป็นพรอมิสที่แก้ไขผลลัพธ์เป็นออบเจ็กต์การตอบกลับ รองรับเป็นมาตรฐานในเบราว์เซอร์สมัยใหม่ทั้งหมดและ Node.js 18 ขึ้นไป
คำขอ GET พื้นฐาน
การใช้ fetch ที่ง่ายที่สุดคือส่งที่อยู่เว็บ รอการตอบกลับ แล้วแยกวิเคราะห์ JSON
async function fetchUsers() {
const res = await fetch('https://api.example.com/users');
if (!res.ok) throw new Error('HTTP ' + res.status);
const users = await res.json();
return users;
}POST พร้อมเนื้อหา JSON
ใช้ method, headers และ body เนื้อหาต้องเป็นสตริง ให้เรียก JSON.stringify() กับออบเจ็กต์
async function createUser(user) {
const res = await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(user)
});
if (!res.ok) throw new Error('Failed: ' + res.status);
return res.json();
}
createUser({ name: 'Alice', email: 'alice@example.com' });PUT สำหรับการอัปเดตทั้งหมด
PUT จะแทนที่ทรัพยากรทั้งหมด ให้ส่งออบเจ็กต์ทั้งชุด ฟิลด์ที่ละไว้โดยทั่วไปจะถูกล้างออกจากเซิร์ฟเวอร์
await fetch(`/api/users/${id}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
id, name: 'Alice', email: 'alice@example.com', role: 'admin'
})
});PATCH สำหรับการอัปเดตบางส่วน
PATCH จะอัปเดตเฉพาะฟิลด์ที่คุณส่ง ใช้สำหรับการอัปเดตบางส่วนแทน PUT
await fetch(`/api/users/${id}`, {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: 'new@example.com' })
});คำขอ DELETE
โดยทั่วไป DELETE จะไม่มีเนื้อหา การตอบกลับมักคืนค่า 204 No Content โดยไม่มีเนื้อหา
async function deleteUser(id) {
const res = await fetch(`/api/users/${id}`, { method: 'DELETE' });
if (!res.ok) throw new Error('Delete failed');
// 204 No Content — no JSON to parse
}ส่วนหัวการยืนยันตัวตน
แนบส่วนหัว Authorization สำหรับปลายทางที่มีการป้องกัน
const res = await fetch('/api/me', {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});พารามิเตอร์คำค้นในที่อยู่เว็บ
สร้างสตริงคำค้นด้วย URLSearchParams เพื่อเข้ารหัสอย่างปลอดภัย
const params = new URLSearchParams({
q: 'react hooks',
page: '2',
pageSize: '20'
});
const res = await fetch(`/api/search?${params}`);
// /api/search?q=react+hooks&page=2&pageSize=20เหตุใด fetch จึงไม่โยนข้อผิดพลาด HTTP
ฟังก์ชันดึงข้อมูลจะปฏิเสธเฉพาะเมื่อเครือข่ายล้มเหลวเท่านั้น การตอบกลับสถานะ 404 หรือ 500 ยังคงถือว่าสำเร็จเสมอ ควรตรวจสอบ res.ok (เป็น true สำหรับ 2xx) หรือ res.status และโยนข้อผิดพลาดด้วยตนเอง
const res = await fetch('/api/users/999');
if (!res.ok) {
// res.ok is false for 4xx and 5xx
throw new Error(`Server error ${res.status}: ${await res.text()}`);
}AbortController สำหรับการยกเลิก
ยกเลิกคำขอที่กำลังดำเนินการเพื่อป้องกันผลลัพธ์เก่า ซึ่งจำเป็นอย่างยิ่งสำหรับการค้นหาแบบพิมพ์ล่วงหน้าและการล้างเอฟเฟกต์ของ React
const controller = new AbortController();
fetch('/api/search?q=hooks', { signal: controller.signal })
.then(res => res.json())
.catch(err => {
if (err.name !== 'AbortError') throw err;
});
// Cancel:
controller.abort();การส่ง FormData
สำหรับการอัปโหลดไฟล์หรือแบบฟอร์มหลายส่วน ให้ส่งออบเจ็กต์ FormData เป็นเนื้อหา อย่ากำหนดประเภทเนื้อหา เพราะเบราว์เซอร์จะเพิ่มให้พร้อมขอบเขตที่ถูกต้อง
const form = new FormData();
form.append('avatar', fileInput.files[0]);
form.append('name', 'Alice');
await fetch('/api/upload', { method: 'POST', body: form });
// no Content-Type header — browser sets multipart/form-dataตรวจสอบความเข้าใจ
เหตุใด fetch() จึงไม่โยนข้อผิดพลาดเมื่อเซิร์ฟเวอร์ส่งสถานะ 404 หรือ 500?
ทบทวน: API สำหรับดึงข้อมูล
ฟังก์ชันดึงข้อมูลคืนค่าเป็นพรอมิสของการตอบกลับ วิธีการมีดังนี้: GET (ค่าเริ่มต้น), POST, PUT, PATCH และ DELETE เนื้อหา JSON ต้องใช้ JSON.stringify() และส่วนหัวประเภทเนื้อหา ฟังก์ชันดึงข้อมูลจะปฏิเสธเฉพาะเมื่อเครือข่ายล้มเหลว จึงต้องตรวจสอบ res.ok ด้วยตนเอง ใช้เครื่องมือสร้างพารามิเตอร์คำค้นสำหรับสตริงคำค้น ใช้ AbortController สำหรับการยกเลิก และใช้ FormData สำหรับการอัปโหลดไฟล์ (ไม่ต้องกำหนดประเภทเนื้อหา เพราะเบราว์เซอร์จัดการให้)
คำถามที่พบบ่อย
บทเรียน “Fetch API: GET, POST, PUT และ DELETE” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Fetch API: GET, POST, PUT และ DELETE” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Frontend Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Fetch API: GET, POST, PUT และ DELETE”
ส่งคำขอ GET ด้วย fetch ส่งเนื้อหา JSON ในคำขอ POST และ PUT และเรียกปลายทาง DELETE เพื่อลบทรัพยากร คุณปฏิบัติ Frontend Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Frontend Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Frontend Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “Fetch API: GET, POST, PUT และ DELETE” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Frontend Academy นี้ได้ไหม
ได้ บทเรียน Frontend Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Fetch API: GET, POST, PUT และ DELETE
- Axios: Interceptors และ Base URL
- การจัดการข้อผิดพลาด: รหัสสถานะ HTTP
- SWR และ React Query สำหรับแคชข้อมูล