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