更新時(shí)間:2022-11-07 11:48:03 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽10407次
Java獲取formdata數(shù)據(jù)的方法是什么?動(dòng)力節(jié)點(diǎn)小編來(lái)告訴大家。
FormData類型其實(shí)是在XMLHttpRequest 2級(jí)定義的,它是為序列化表以及創(chuàng)建與表單格式相同的數(shù)據(jù)(當(dāng)然是用于XHR傳輸)提供便利。
創(chuàng)建一個(gè)formData對(duì)象實(shí)例有幾種方式
(1)創(chuàng)建一個(gè)空對(duì)象實(shí)例
var formData = new FormData();
此時(shí)可以調(diào)用append()方法來(lái)添加數(shù)據(jù)
(2)使用已有的表單來(lái)初始化一個(gè)對(duì)象實(shí)例
假如現(xiàn)在頁(yè)面已經(jīng)有一個(gè)表單
名字 密碼
我們可以使用這個(gè)表單元素作為初始化參數(shù),來(lái)實(shí)例化一個(gè)formData對(duì)象
// 獲取頁(yè)面已有的一個(gè)form表單var form = document.getElementById("myForm");// 用表單來(lái)初始化var formData = new FormData(form);// 我們可以根據(jù)name來(lái)訪問(wèn)表單中的字段var name = formData.get("name"); // 獲取名字var psw = formData.get("psw"); // 獲取密碼// 當(dāng)然也可以在此基礎(chǔ)上,添加其他數(shù)據(jù)formData.append("token","kshdfiwi3rh");
首先,我們要明確formData里面存儲(chǔ)的數(shù)據(jù)形式,一對(duì)key/value組成一條數(shù)據(jù),key是唯一的,一個(gè)key可能對(duì)應(yīng)多個(gè)value。如果是使用表單初始化,每一個(gè)表單字段對(duì)應(yīng)一條數(shù)據(jù),它們的HTML name屬性即為key值,它們value屬性對(duì)應(yīng)value值。

(1)獲取值
我們可以通過(guò)get(key)/getAll(key)來(lái)獲取對(duì)應(yīng)的value,
formData.get("name"); // 獲取key為name的第一個(gè)值formData.get("name"); // 返回一個(gè)數(shù)組,獲取key為name的所有值
(2)添加數(shù)據(jù)
我們可以通過(guò)append(key, value)來(lái)添加數(shù)據(jù),如果指定的key不存在則會(huì)新增一條數(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"]
(3)設(shè)置修改數(shù)據(jù)
我們可以通過(guò)set(key, value)來(lái)設(shè)置修改數(shù)據(jù),如果指定的key不存在則會(huì)新增一條,如果存在,則會(huì)修改對(duì)應(yīng)的value值。
formData.append("k1", "v1");formData.set("k1", "1");formData.getAll("k1"); // ["1"]
(4)判斷是否該數(shù)據(jù)
我們可以通過(guò)has(key)來(lái)判斷是否對(duì)應(yīng)的key值
formData.append("k1", "v1");formData.append("k2",null);formData.has("k1"); // trueformData.has("k2"); // trueformData.has("k3"); // false
(5)刪除數(shù)據(jù)
通過(guò)delete(key),來(lái)刪除數(shù)據(jù)
formData.append("k1", "v1");formData.append("k1", "v2");formData.append("k1", "v1");formData.delete("k1");formData.getAll("k1"); // []
(6)遍歷
我們可以通過(guò)entries()來(lái)獲取一個(gè)迭代器,然后遍歷所有的數(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ī)則
每調(diào)用一次next()返回一條數(shù)據(jù),數(shù)據(jù)的順序由添加的順序決定
返回的是一個(gè)對(duì)象,當(dāng)其done屬性為true時(shí),說(shuō)明已經(jīng)遍歷完所有的數(shù)據(jù),這個(gè)也可以作為判斷的依據(jù)
返回的對(duì)象的value屬性以數(shù)組形式存儲(chǔ)了一對(duì)key/value,數(shù)組下標(biāo)0為key,下標(biāo)1為value,如果一個(gè)key值對(duì)應(yīng)多個(gè)value,會(huì)變成多對(duì)key/value返回
我們也可以通過(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}
我們可以通過(guò)xhr來(lái)發(fā)送數(shù)據(jù)
var xhr = new XMLHttpRequest();xhr.open("post","login");xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.send(formData);
這種方式可以來(lái)實(shí)現(xiàn)文件的異步上傳。
瀏覽器兼容性查詢:https://caniuse.com/#search=formdata

相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)