Send asynchronous browser requests with fetch, XMLHttpRequest, JSON, errors, and progressive UI.
Lessons
Send form fields and files with FormData.
FormData & File Uploads is easiest to learn by reading the example, changing it, and observing the result.
const form = new FormData();
form.append('avatar', fileInput.files[0]);
form.append('title', 'My upload');
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/upload');
xhr.upload.onprogress = e => {
if (e.lengthComputable) {
const percent = Math.round((e.loaded / e.total) * 100);
document.querySelector('#bar').style.width = percent + '%';
}
};
xhr.onload = () => console.log('Done', xhr.status);
xhr.send(form); // do NOT set Content-Type; the browser adds the boundaryPractice the FormData & File Uploads example in a small scratch file, then explain what changed and why.