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

ออบเจ็กต์ FormData

สร้างข้อมูลแบบหลายส่วนจากแบบฟอร์ม

ออบเจ็กต์ FormData เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

FormData คืออะไร

FormData คือส่วนติดต่อโปรแกรมประยุกต์ของเบราว์เซอร์สำหรับสร้างชุดคู่คีย์/ค่าที่แทนช่องข้อมูลในแบบฟอร์มและค่าของช่องเหล่านั้น เป็นวิธีมาตรฐานในการจัดแพ็กข้อมูล รวมถึงไฟล์ เพื่อส่งไปยังเซิร์ฟเวอร์

ข้อมูลนี้เข้ารหัสเป็น multipart/form-data ซึ่งรองรับการอัปโหลดข้อมูลไบนารี

การสร้าง FormData ว่าง

สร้าง FormData ว่าง แล้วเพิ่มช่องข้อมูลทีละช่องด้วย append

const data = new FormData();
data.append('username', 'ada');
data.append('email', 'ada@example.com');

console.log(data.get('username'));

การสร้างจากองค์ประกอบแบบฟอร์ม

ส่งองค์ประกอบ <form> ให้ตัวสร้าง แล้วช่องป้อนข้อมูลที่มีชื่อทุกช่องจะถูกเก็บโดยอัตโนมัติ นี่เป็นการใช้งานที่พบบ่อยที่สุด

const form = document.querySelector('#signup');
const data = new FormData(form);

for (const [key, value] of data.entries()) {
  console.log(key, value);
}

append กับ set

append จะเพิ่มค่าแม้ว่าจะมีคีย์นั้นอยู่แล้ว จึงทำให้หนึ่งคีย์มีได้หลายค่า ส่วน set จะแทนที่ค่าที่มีอยู่ทั้งหมดของคีย์นั้น

const data = new FormData();
data.append('tag', 'a');
data.append('tag', 'b');
console.log(data.getAll('tag'));

data.set('tag', 'only');
console.log(data.getAll('tag'));

การอ่านค่า

get จะคืนค่าค่าแรกของคีย์หนึ่ง ส่วน getAll จะคืนค่าทุกค่าเป็นอาร์เรย์ และ has ใช้ตรวจสอบว่ามีคีย์นั้นอยู่หรือไม่

const data = new FormData();
data.append('color', 'red');
data.append('color', 'blue');

console.log(data.get('color'));
console.log(data.getAll('color'));
console.log(data.has('color'));

การลบช่องข้อมูล

delete จะลบค่าทั้งหมดของคีย์หนึ่ง เหมาะสำหรับลบช่องข้อมูลบางช่องออกก่อนส่ง

const data = new FormData();
data.append('keep', '1');
data.append('remove', '2');

data.delete('remove');
console.log(data.has('remove'));
console.log(data.has('keep'));

การวนซ้ำรายการ

FormData สามารถวนซ้ำได้ ใช้ entries, keys หรือ values หรือใช้ลูป for...of เพื่อไล่ดูคู่ค่าทั้งหมด

const data = new FormData();
data.append('a', '1');
data.append('b', '2');

for (const key of data.keys()) {
  console.log('field: ' + key);
}

การเพิ่มไฟล์

append รับ File หรือ Blob เป็นค่าได้ อาร์กิวเมนต์ตัวที่สามซึ่งเป็นทางเลือกจะกำหนดชื่อไฟล์ที่จะส่งไปยังเซิร์ฟเวอร์

const fileInput = document.querySelector('#avatar');
const data = new FormData();
data.append('avatar', fileInput.files[0], 'profile.png');

console.log(data.get('avatar').name);

เหตุใดจึงใช้รูปแบบข้อมูลแบบฟอร์มหลายส่วน

FormData จะแปลงข้อมูลเป็น รูปแบบข้อมูลแบบฟอร์มหลายส่วน ซึ่งสามารถบรรจุทั้งช่องข้อมูลข้อความและเนื้อหาไฟล์ไบนารีไว้ในเนื้อหาคำขอเดียวกันได้ นี่จึงเป็นรูปแบบหลักสำหรับการอัปโหลดไฟล์

const data = new FormData();
data.append('title', 'Vacation Photo');
data.append('photo', new Blob(['binary'], { type: 'image/png' }), 'pic.png');

console.log(data.has('photo'));

การแปลงเป็นออบเจ็กต์

สำหรับแบบฟอร์มที่มีแต่ข้อความ Object.fromEntries สามารถแปลง FormData เป็นออบเจ็กต์ทั่วไปได้ โปรดทราบว่าการแปลงนี้จะเก็บไว้เพียงค่าเดียวต่อคีย์ที่ซ้ำกัน

const form = document.querySelector('#login');
const data = new FormData(form);
const plain = Object.fromEntries(data.entries());

console.log(plain);

เหตุใด FormData จึงสำคัญ

FormData เป็นสะพานเชื่อมระหว่างแบบฟอร์ม HTML กับคำขอเครือข่าย โดยรวบรวมช่องข้อมูลและไฟล์ รองรับคีย์ที่ซ้ำกัน และเข้ารหัสข้อมูลไบนารีอย่างปลอดภัย จากนั้นคุณจะได้อ่านเนื้อหาไฟล์ด้วย FileReader แล้วส่ง FormData ด้วย fetch

const form = document.querySelector('#contact');
const data = new FormData(form);
data.append('source', 'web');

console.log([...data.keys()]);

ตรวจสอบความเข้าใจ

append และ set ใน FormData แตกต่างกันอย่างไร

ทบทวน: ออบเจ็กต์ FormData

คุณได้เรียนรู้การจัดแพ็กข้อมูลแบบฟอร์มดังนี้

  • new FormData(form) จะเก็บช่องป้อนข้อมูลที่มีชื่อโดยอัตโนมัติ
  • append อนุญาตให้มีคีย์ซ้ำกัน ส่วน set จะแทนที่ค่าเหล่านั้น
  • อ่านค่าด้วย get, getAll, has และวนซ้ำด้วย entries
  • ข้อมูลจะเข้ารหัสเป็น รูปแบบข้อมูลแบบฟอร์มหลายส่วน ซึ่งรองรับไฟล์และข้อมูลไบนารี

คำถามที่พบบ่อย

บทเรียน “ออบเจ็กต์ FormData” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ออบเจ็กต์ FormData” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ออบเจ็กต์ FormData”

สร้างข้อมูลแบบหลายส่วนจากแบบฟอร์ม คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ออบเจ็กต์ FormData” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม

ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ออบเจ็กต์ FormData
  2. การอ่านไฟล์ด้วย FileReader
  3. Blob และ URL ของออบเจ็กต์
  4. การอัปโหลดไฟล์ด้วย Fetch
← กลับไปที่ JavaScript Academy