一、概述
FormData 對象的使用:
1.用一些鍵值對來模擬一系列表單控件:即把form中所有表單元素的name與value組裝成
一個queryString
2. 異步上傳二進制文件。
二、使用
1.FormData對象的操作方法,全部在原型中,自己本身沒任何的屬性及方法。

let formData = new FormData()
formData.append('user', 'zhang')
獲取 formData.get('user') //zhang
刪除 formData.delete('user')
.....
2.使用FormData對象發送文件
HTML部分
<form action="">
<label for="">
姓名: <input type="text" name="name">
</label>
<label for="">
文件:<input id="file" type="file" name="file">
</label>
<label for="">
<input type="button" value="保存">
</label>
</form>
JS部分
var btn = document.querySelector('[type=button]');
btn.onclick = function () {
// 文件元素
var file = document.querySelector('[type=file]');
// 通過FormData將文件轉成二進制數據
var formData = new FormData();
// 將文件轉二進制
*****注意2******
formData.append('upload', file.files[0]);
*****注意1******
var xhr = new XMLHttpRequest;
xhr.open('post', 'file.php');
// 監聽上傳進度
xhr.upload.onprogress = function (ev) {
// 事件對象
// console.log(ev);
var percent = (ev.loaded / ev.total) * 100 + '%';
console.log(percent);
progress.style.width = percent;
}
xhr.send(formData);
xhr.onreadystatechange = function () {
if(xhr.readyState == 4 && xhr.status == 200) {
//
}
}
}
注意1:使用jQuery
$.ajax({
url: 'file.php',
type: 'POST',
data: formdata, // 上傳formdata封裝的數據
dataType: 'JSON',
cache: false, // 不緩存
processData: false, // jQuery不要去處理發送的數據
contentType: false, // jQuery不要去設置Content-Type請求頭
success:function (data) { //成功回調
console.log(data);
}
});
注意2:參數
new FormData的參數是一個DOM對象,而非jQuery對象
var formData = new FormData($("#file")[0]);
三、jQuery的參數序列化方法serialize()
序列表表格內容為字符串,用於 Ajax 請求。
$("form").serialize()
