面的代碼創(chuàng)建了一個空的 FormData 對象:
var formData=new FormData(); // Currently empty
FormData.append()
FormData 接口的 append() 方法會添加一個新值到 FormData 對象內(nèi)的一個已存在的鍵中, 如果鍵不存在則會添加該鍵。
你可以通過 FormData.append 往對象里加入鍵值對:
formData.append('username', 'Chris');
formData.append('userpic', myFileInput.files[0], 'chris.jpg');
跟常規(guī)表單數(shù)據(jù)一樣,你可以使用同一個名稱添加多個值 。例如 (為了與PHP命名習(xí)慣一致在名稱中添加了[]):
formData.append('userpic[]', myFileInput1.files[0], 'chris1.jpg');
formData.append('userpic[]', myFileInput2.files[0], 'chris2.jpg');
實例: 如何清空FormData對象的數(shù)據(jù)?
HTML區(qū):
<div class="form-group">
<label for="avatar">頭像<img class="avatar" width="80px" height="80px"
src="{% static 'image/head/default.png' %}"
alt="圖片未加載出"></label>
<input type="file" id="avatar" style="display: none">
</div>
JS代碼區(qū)
<script>
{#替換頭像位置圖片方法#}
$('#avatar').change(function () {
{#jquery對象轉(zhuǎn)換為DOM對象#}
var choose_file=$(this)[0].files[0];
{#創(chuàng)建一個閱讀器對象#}
var reader=new FileReader();
{#讀取choose_file的文件對象#}
reader.readAsDataURL(choose_file);
{#上面代碼加載完再運行函數(shù)內(nèi)代碼(原因:圖片未加載完下面的代碼就有可能執(zhí)行完了)#}
reader.onload=function () {
{# 路徑的值在reader.result中#}
$('.avatar').attr("src", reader.result)
}
}
)
</script>
PS:注意務(wù)必要引入jQuery樣式
#python##Python入門推薦#
FormData類型其實是在XMLHttpRequest 2級定義的,它是為序列化表以及創(chuàng)建與表單格式相同的數(shù)據(jù)(當(dāng)然是用于XHR傳輸)提供便利。
創(chuàng)建一個formData對象實例有幾種方式
1、創(chuàng)建一個空對象實例
var formData=new FormData();
此時可以調(diào)用append()方法來添加數(shù)據(jù)
2、使用已有的表單來初始化一個對象實例
假如現(xiàn)在頁面已經(jīng)有一個表單
<form id="myForm" action="" method="post">
<input type="text" name="name">名字
<input type="password" name="psw">密碼
<input type="submit" value="提交">
</form>
我們可以使用這個表單元素作為初始化參數(shù),來實例化一個formData對象
// 獲取頁面已有的一個form表單
var form=document.getElementById("myForm");
// 用表單來初始化
var formData=new FormData(form);
// 我們可以根據(jù)name來訪問表單中的字段
var name=formData.get("name"); // 獲取名字
var psw=formData.get("psw"); // 獲取密碼
// 當(dāng)然也可以在此基礎(chǔ)上,添加其他數(shù)據(jù)
formData.append("token","kshdfiwi3rh");
首先,我們要明確formData里面存儲的數(shù)據(jù)形式,一對key/value組成一條數(shù)據(jù),key是唯一的,一個key可能對應(yīng)多個value。如果是使用表單初始化,每一個表單字段對應(yīng)一條數(shù)據(jù),它們的HTML name屬性即為key值,它們value屬性對應(yīng)value值。
我們可以通過get(key)/getAll(key)來獲取對應(yīng)的value,
formData.get("name"); // 獲取key為name的第一個值
formData.get("name"); // 返回一個數(shù)組,獲取key為name的所有值
我們可以通過append(key, value)來添加數(shù)據(jù),如果指定的key不存在則會新增一條數(shù)據(jù),如果key存在,則添加到數(shù)據(jù)的末尾
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k1", "v1");
formData.get("k1"); // "v1"
formData.getAll("k1"); // ["v1","v2","v1"]
我們可以通過set(key, value)來設(shè)置修改數(shù)據(jù),如果指定的key不存在則會新增一條,如果存在,則會修改對應(yīng)的value值。
formData.append("k1", "v1");
formData.set("k1", "1");
formData.getAll("k1"); // ["1"]
我們可以通過has(key)來判斷是否對應(yīng)的key值
formData.append("k1", "v1");
formData.append("k2",null);
formData.has("k1"); // true
formData.has("k2"); // true
formData.has("k3"); // false
通過delete(key),來刪除數(shù)據(jù)
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k1", "v1");
formData.delete("k1");
formData.getAll("k1"); // []
我們可以通過entries()來獲取一個迭代器,然后遍歷所有的數(shù)據(jù),
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k2", "v1");
var i=formData.entries();
i.next(); // {done:false, value:["k1", "v1"]}
i.next(); // {done:fase, value:["k1", "v2"]}
i.next(); // {done:fase, value:["k2", "v1"]}
i.next(); // {done:true, value:undefined}
可以看到返回迭代器的規(guī)則
我們也可以通過values()方法只獲取value值
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k2", "v1");
var i=formData.entries();
i.next(); // {done:false, value:"v1"}
i.next(); // {done:fase, value:"v2"}
i.next(); // {done:fase, value:"v1"}
i.next(); // {done:true, value:undefined}
我們可以通過xhr來發(fā)送數(shù)據(jù)
var xhr=new XMLHttpRequest();
xhr.open("post","login");
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(formData);
這種方式可以來實現(xiàn)文件的異步上傳。
瀏覽器兼容性查詢:https://caniuse.com/#search=formdata
英文文檔:https://developer.mozilla.org/en-US/docs/Web/API/FormData
轉(zhuǎn)自:https://segmentfault.com/a/1190000006716454
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。