FormData
เป็นเครื่องมือที่ผู้ใช้ XHR ต้องมี และกำลังได้รับการอัปเกรดใน Chrome 50
เราจะเพิ่มวิธีการต่างๆ ที่ช่วยให้คุณตรวจสอบออบเจ็กต์ FormData
หรือแก้ไขภายหลังได้
ตอนนี้คุณใช้ get()
, delete()
และตัวช่วยการทำซ้ำ เช่น entries
, keys
และอื่นๆ ได้แล้ว (ดูรายการทั้งหมด)
หากคุณยังไม่ได้ใช้ FormData โปรดทราบว่า FormData เป็น API ที่เรียบง่ายและได้รับการรองรับอย่างแพร่หลาย ซึ่งช่วยให้คุณสร้างแบบฟอร์มเสมือนแบบเป็นโปรแกรมและส่งไปยังที่ไกลๆ ได้โดยใช้ window.fetch()
หรือ XMLHttpRequest.send(formData)
อ่านตัวอย่างได้ที่ด้านล่าง
แยกวิเคราะห์แบบฟอร์มจริงอย่างมือโปร
FormData
สามารถสร้างจากแบบฟอร์ม HTML จริง โดยถ่ายภาพค่าปัจจุบันทั้งหมด
แต่เดิมออบเจ็กต์นี้ทึบแสงทั้งหมด สิ่งที่ทำได้คือส่งต่อไปยังเซิร์ฟเวอร์โดยไม่มีการแก้ไข
ตอนนี้คุณสามารถนำภาพไปใช้ แก้ไข ตัดต่อ สังเกต ย่อขนาด เปลี่ยนแปลง และสุดท้ายอัปโหลดได้
function sendRequest(theFormElement) {
var formData = new FormData(theFormElement);
formData.delete("secret_user_data"); // don't include this one!
if (formData.has("include_favorite_color")) {
formData.set("color", userPrefs.getColor());
}
// log all values like <input name="widget">
console.info("User selected widgets", formData.getAll("widget"));
window.fetch(url, {method: 'POST', body: formData});
}
นอกจากนี้ คุณยังส่ง FormData
ผ่าน XMLHttpRequest
เวอร์ชันเก่าได้ด้วย โดยทำดังนี้
var x = new XMLHttpRequest();
x.open('POST', url);
x.send(formData);
อย่าทิ้ง FormData
หากคุณสร้าง FormData
ของคุณเองตั้งแต่ต้น คุณอาจรู้สึกหงุดหงิดที่ไม่สามารถนํากลับมาใช้ใหม่ได้ เนื่องจากคุณใช้เวลากับช่องเหล่านั้นไปมาก
เนื่องจากทั้ง 2 วิธีของ window.fetch()
และ XMLHttpRequest.send()
จะจับภาพหน้าจอของ FormData
คุณจึงใช้และแก้ไขงานซ้ำได้อย่างปลอดภัย
ลองดูตัวอย่างนี้
// append allows multiple values for the same key
var formData = new FormData();
formData.append("article", "id-123");
formData.append("article", "id-42");
// send like request
formData.set("action", "like");
window.fetch(url, {method: 'POST', body: formData});
// send reshare request
formData.set("action", "reshare"); // overrides previous "action"
window.fetch(url, {method: 'POST', body: formData});