JavaScript之FormData方法
FormData型別其實是在XMLHttpRequest 2級定義的,它是為序列化表以及建立與表單格式相同的資料(當然是用於XHR傳輸)提供便利。
1、建構函式
- 建立一個空物件例項。可以通過呼叫append()方法進行新增資料。
var formData = new FormData();
- 使用已有的表單來初始化一個物件例項
<form id="myForm" action="" method="post">
<input type="text" name="username"/>
<input type="password" name="password"/>
<button type="submit">提交</button>
</form>
可以使用這個表單元素作為初始化引數,來例項化一個formData物件。
// 獲取頁面已有的form表單
var myform = document.getElementById('myForm');
// 用表單來初始化
var formData = new FormData(myform);
// 可以根據表單元素的name屬性值來訪問表單中的欄位
var username = formData.get('username'); // 獲取使用者名稱字
var paasword = formData.get('password'); // 獲取使用者密碼
// 也可以在此基礎上,新增其他資料
formData.append('sex','male');
2、操作方法
首先,要明確formData裡面儲存的資料形式,一對key/value組成一條資料,key是唯一的,一個key可能對應多個value。如果是是用表單初始化,每一個表單欄位對應一條資料,它們的HTML name屬性即為key值,它們value屬性對應value值。
- 獲取值
可以通過get(key)/getAll(key)來獲取對應的value。
formData.get('username'); // 獲取key為username的第一個值
formData.getAll('username'); // 返回一個陣列,獲取Key為name的所有值
- 新增資料
通過append(key,value)來新增資料,如果指定的key不存在則會新增一條資料,如果key存在,則新增到資料的末尾。
formData.append('key1','val-1');
formData.append('key1','val-2');
formData.append('key1','val-1');
formData.get('key1'); // "val-1"
formData.getAll('key1'); // ["val-1","val-2","val-1"]
- 設定修改資料
通過set(key,value)來設定修改資料,如果指定的key不存在則會新增一條,如果存在,則會修改對應的value值。
formData.append('key1','val-1');
formData.set('key1','val-2');
formData.getAll('key1'); // ["val-1"]
- 判斷是否存在該資料
通過has(key)來判斷是否對應的key值。
formData.append('key1',null);
formData.has('key1'); // true
formData.has('key2'); // false
- 刪除資料
通過delete(key)來刪除資料。
formData.append('k1','v1');
formData.append('k1','v2');
formData.delete('k1');
formData.getAll('k1'); // []
- 遍歷
通過entries()來獲取一個迭代器,然後遍歷所有的資料。
formData.append('k1','value-1');
formData.append('k1','value-2');
formData.append('k2','value-3');
var i = formData.entries();
i.next(); // {done:false,value:["k1","value-1"]}
i.next(); // {done:false,value:["k1","value-2"]}
i.next(); // {done:false,value:["k2","value-3"]}
i.next(); // {done:true,value:undefined}
可以看到返回迭代器的規則:
1.每呼叫一次next()返回一條資料,資料的順序由新增的順序決定。
2.返回的是一個物件,當其done屬性為true時,說明已經遍歷完所有的資料,這個也可以作為判斷的依據。
3.返回的物件的value屬性以陣列形式儲存了一對key/value,陣列下標0為key,下標1為value,如果一個key值對應多個value,會變成多對key/value返回。
還可以通過values()方法只獲取value值。
3、傳送資料
可以通過xhr來傳送資料,這種方式可以來實現檔案的非同步上傳。
var xhr = new XMLHttpRequest();
xhr.open("post","login");
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(formData);
相關文章
- JavaScript FormData的詳細介紹及使用JavaScriptORM
- vue 檔案上傳方法formDataVueORM
- JavaScript 之迭代方法JavaScript
- FormData getAll()ORM
- FormData delete()ORMdelete
- Javascript之Object.defineProperty方法JavaScriptObject
- javascript設計模式 之 8 模板方法模式JavaScript設計模式
- JavaScript 複習之 Object物件的相關方法JavaScriptObject物件
- JavaScript之thisJavaScript
- JavaScript toggle() 方法JavaScript
- JavaScript copyWithin()方法JavaScript
- JavaScript repeat()方法JavaScript
- JavaScript match()方法JavaScript
- JavaScript find()方法JavaScript
- JavaScript map()方法JavaScript
- JavaScript Date() 方法JavaScript
- JavaScript show() 方法JavaScript
- JavaScript showModal() 方法JavaScript
- formData原生實現圖片上傳ORM
- http 請求 formData 型別資料HTTPORM型別
- 一次性搞懂JavaScript正規表示式之方法JavaScript
- 一篇文章搞懂JavaScript正規表示式之方法JavaScript
- js堅持不懈之13:JavaScript查詢HTML元素的方法JSJavaScriptHTML
- JavaScript之argumentsJavaScript
- JavaScript 之 ajaxJavaScript
- 前端之JavaScript前端JavaScript
- JavaScript 之 ProxyJavaScript
- javaScript之物件JavaScript物件
- JavaScript Array map() 方法JavaScript
- javascript的match方法JavaScript
- JavaScript Array常用方法JavaScript
- JavaScript陣列方法JavaScript陣列
- Javascript 加密解密方法JavaScript加密解密
- javascript通用方法收集JavaScript
- 好程式設計師web前端之JavaScript陣列去重方法程式設計師Web前端JavaScript陣列
- 關於 FormData 物件陣列傳值總結ORM物件陣列
- HTTP請求中 request payload 和 formData 區別?HTTPORM
- Express中關於formData物件接收的模組ExpressORM物件