FormData對象的使用


一、概述

  FormData類型是XMLHttpRequest 2級定義的,它是為序列化表以及創建與表單格式相同的數據提供便利。

  作用:1.利用一些鍵值對來模擬一系列表單控件:即將form中的所有表單元素的namevalue組裝成一個queryString;2.異步上傳二進制文件

  與普通Ajax相比,使用FormData的最大優點:可以異步上傳二進制文件。

二、使用

  1.創建FormData對象方式

    1).let formdata = new FormData();  創建一個空的FormData對象,可以使用formdata.append(key,value)來添加數據。

    2).let formdata = new FormData(form);  使用已有的表單來初始化一個FormData對象。

<form id="upload" method="post" action="">
  <input type="text" name="username" value=""/>
  <input type="password" name="paw" value=""/>
  <input type="button" value="提交"/>
</form>
//獲取一個form表單對象
let form = document.getElementById("form"); //用這個表單對象來初始化FormData對象
let formdata = new FormData(form); //我們可以通過name來訪問表單中的字段
formdata.get("username");  //獲取username的值
formdata.get("pwd");       //獲取pwd的值 //我們也可以添加數據
formdata.append("token","fegahgag54");

  2.數據形式

    首先,我們要明確FormData里面存儲的數據形式,一對key/value組成一條數據,key是唯一的,一個key可能對應多個value。如果使用表單初始化FormData對象,每一個表單字段對應一條數據,他們的name屬性值對應key值,value屬性值對應value值。

  3.操作方法

    3.1獲取數據   formdata.get(key)

formdata.get("username");  //獲取key為username的第一個值
formdata.getAll("username"); //獲取key為username的所有值,返回一個數組

    3.2添加數據   formdata.append(key,value)

formdata.append("k1","v1"); formdata.append("k1","v2"); formdata.append("k2","v2"); formdata.getAll("k1");  //["v1","v2"]
formdata.get("k2");  //"v2"

    3.3設置/修改數據   formdata.set(key,value)如果key不存在則新增一條數據,如果存在,則會修改對應的value值。

formdata.append("k1","v1"); formdata.set("k1","v2"); formdata.get("k1");  //"v2"

    3.4判斷是否存在某條數據   formdata.has(key),存在返回true,不存在返回false。

formdata.append("k1","v1"); formdata.has("k1");  //true
formdata.has("k2");  //false

    3.5刪除數據   formdata.delete(key);

formdata.append("k1","v1"); formdata.delete("k1"); formdata.get("k1");  //null

    3.6遍歷 通過entries()或values()來獲取一個遍歷器

formdata.append("k1","v1"); formdata.append("k2","v2"); for(let [key,value] of formdata.entries()){ console.log(key +":"+ value) } 輸出: "k1:v1"
"k2:v2"
formdata.append("k1","v1"); formdata.append("k2","v2"); for(let value of formdata.values()){ console.log(value) } 輸出: "v1"
"v2"

  4.發送數據(上傳文件不刷新頁面)

<input type="file" id="upload"/>
<input type="button" id="upload-btn" value="上傳"/>
let btn = document.getElementById("upload-btn"); btn.onclick = function(){ let file = document.getElementById("upload"); let formdata = new FormData(); formdata.append("file",file.files[0]);
 fetch("https://www.baidu.com",{ 
method:'POST',
body:formdata
}).then(d
=>{
console.log(
"result is" + d);
alert(
"上傳成功");
})
}

三、瀏覽器兼容性

 參考:

https://www.cnblogs.com/lhb25/p/html5-formdata-tutorials.html

https://segmentfault.com/a/1190000012327982

https://segmentfault.com/a/1190000006716454


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM