一、概述
FormData 對象的使用: 1.用一些鍵值對來模擬一系列表單控件:即把form中所有表單元素的name與value組裝成 一個queryString 2. 異步上傳二進制文件。
二、使用
1.FormData對象的操作方法,全部在原型中,自己本身沒任何的屬性及方法。
1 let formData = new FormData() 2 formData.append('user', 'zhang') 3 獲取 formData.get('user') //zhang 4 刪除 formData.delete('user') 5 .....
2.使用FormData對象發送文件
1 HTML部分 2 <form action=""> 3 <label for=""> 4 姓名: <input type="text" name="name"> 5 </label> 6 <label for=""> 7 文件:<input id="file" type="file" name="file"> 8 </label> 9 <label for=""> 10 <input type="button" value="保存"> 11 </label> 12 </form> 13 JS部分 14 var btn = document.querySelector('[type=button]'); 15 btn.onclick = function () { 16 // 文件元素 17 var file = document.querySelector('[type=file]'); 18 // 通過FormData將文件轉成二進制數據 19 var formData = new FormData(); 20 // 將文件轉二進制 21 *****注意2****** 22 formData.append('upload', file.files[0]); 23 *****注意1****** 24 var xhr = new XMLHttpRequest; 25 xhr.open('post', 'file.php'); 26 // 監聽上傳進度 27 xhr.upload.onprogress = function (ev) { 28 // 事件對象 29 // console.log(ev); 30 31 var percent = (ev.loaded / ev.total) * 100 + '%'; 32 33 console.log(percent); 34 35 progress.style.width = percent; 36 } 37 38 xhr.send(formData); 39 40 xhr.onreadystatechange = function () { 41 if(xhr.readyState == 4 && xhr.status == 200) { 42 // 43 } 44 } 45 }
注意1:使用jQuery
1 $.ajax({ 2 url: 'file.php', 3 type: 'POST', 4 data: formdata, // 上傳formdata封裝的數據 5 dataType: 'JSON', 6 cache: false, // 不緩存 7 processData: false, // jQuery不要去處理發送的數據 8 contentType: false, // jQuery不要去設置Content-Type請求頭 9 success:function (data) { //成功回調 10 console.log(data); 11 } 12 });
注意2:參數
new FormData的參數是一個DOM對象,而非jQuery對象
1 var formData = new FormData($("#file")[0]);
三、jQuery的參數序列化方法serialize()
序列表表格內容為字符串,用於 Ajax 請求。
1 $("form").serialize()