FormData thu thập dữ liệu form thành cặp khoá–giá trị, kể cả file, để gửi bằng JavaScript.
js
const form = document.querySelector('form')
form.addEventListener('submit', async (e) => {
e.preventDefault()
const fd = new FormData(form) // chỉ field "successful": có name và không disabled
fd.append('source', 'web') // thêm field ngoài form
fd.get('email') // đọc một giá trị
fd.getAll('tags') // nhiều giá trị cùng tên (checkbox)
await fetch('/api/profile', { method: 'POST', body: fd })
// KHÔNG set Content-Type — browser tự sinh boundary cho multipart
})Chuyển sang JSON khi API cần:
js
const json = Object.fromEntries(new FormData(form)) // mất field trùng tênLưu ý 1: input không có name sẽ không xuất hiện trong FormData — kể cả khi có id và value.
Lưu ý 2: Object.fromEntries giữ lại giá trị cuối với các field trùng tên (nhóm checkbox); trường hợp đó phải dùng getAll().
Lưu ý 3: control đang disabled, checkbox/radio chưa tick và nút không phải submitter đều không được thu thập — xem thêm câu về readonly vs disabled.