0Pricing
Frontend Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Fetch API: GET, POST, PUT และ DELETE
  2. Axios: Interceptors และ Base URL
  3. การจัดการข้อผิดพลาด: รหัสสถานะ HTTP
  4. SWR และ React Query สำหรับแคชข้อมูล
← กลับไปที่ Frontend Academy