FormData

語法

  • var formData = new FormData(form)

form--可選, 一個 HTML 上的 <form> 表單元素一一當指定了,這種方式建立的 FormData 對象會自動將 form 中的表單值也包含進去, 包括文件內容也會被編碼以後包含進去瀏覽器

例子

第一種方式服務器

  • var formData = new FormData() //當前爲空
  • formData.append('username', 'BetiaStar') // 使用 FormData.append 來添加鍵/值對到表單裏面

第二種方式數據結構

  • <form id="myForm" name="myForm">
  •   <div>
  •     <label for="username">輸入用戶名</label>
  •     <input type="text" id="username" name="username">
  •   </div>
  •   <div>
  •     < for="useracc">輸入帳號:</label>
  •     < type="text" id="useracc" name="useracc">
  •   </div>
  •   <div>
  •     <label for="userfile">上傳文件:</label>
  •     <input type="file" id="userfile" name="userfile">
  •   </div>
  • <input type="submit" value="Submit!">
  • </form>

注意:全部的輸入元素都須要有name屬性,不然沒法訪問到值。app

  • var myForm = document.getElementById('myForm')
  • formData = new FormData(myForm)

方法

append()

  • 這個方法有兩個版本: 一個有兩個參數的版本和一個有三個參數的版本
  • formData.append(name, value)
  • formData.append(name, value, filename)
  • name
  •   - value中包含的數據對應的表單名稱
  • value
  •   - 表單的值。能夠是 USVString 或者 Blob (包括子類型,如 File)
  • filename--可選
  •   - 傳給服務器的文件名稱 (一個 USVString ), 當一個 Blob 或者 File 被做爲第二個參數的時候, Blob 對象的默認文件名是 "blob"。File 對象的默認文件名是該文件的名稱

注意: 若是你指定一個 Blob 做爲數據添加到 FormData 對象中,文件名會被放在 "Content-Disposition" 頭部(經常會根據瀏覽器變化而變化)傳給服務器編碼

示例

  • // 下面的代碼建立了一個空的 FormData 對象
  • var formData = new FormData()
  • // 你能夠經過 FormData.append wangle對象里加入鍵值對
  • formData.append('username', 'BetiaStar')
  • formData.append('userpic', userfile.files[0], 'betiastar')
  • // 跟常規表單數據同樣,你能夠使用同一個名稱添加多個值。例如(爲了與 PHP 命名習慣一致在名稱中添加了 [])
  • formData.append('hobby[]', sing, '唱歌')
  • formData.append('hobby[]', dance, '跳舞')
  • formData.append('hobby[]', run, '跑步')
  • // 這項技術使得多文件上傳的處理更加簡單,由於所得數據結構更有利於循環

delete()

  • formData.delete(name)
  • name
  •   - 要刪除的 Key 的名字
  • formDat.delete('username')

entries()

  • formData.entries()
  • var formData = new FormData()
  • formData.append('key1', 'value1')
  • formData.append('key2', 'value2')
  • for(var iter of formData.entries()) {
  •   console.log(iter[0] + ', ' + iter[1])
  • }

get()

  • formData.get(name)
  • name
  •   - 將要獲取值的鍵名
  • formData.append('username', 'betiastar')
  • formData.get('username')

getAll()

  • formData.getAll(name)
  • name
  •   - 將要獲取值的鍵名
  • formData.append('hobby', 'sing')
  • formData.append('hobby', 'run')
  • formData.getAll('hobby')

has()

  • formData.has(name)
  • name
  •   - 將要查詢的鍵名
  • formData.append('hobby', 'sing')
  • formData.has('hobby')

keys()

  • formData.keys()
  • var formData = new FormData()
  • formData.append('key1', 'value1')
  • formData.append('key2', 'value2')
  • for(var iter of formData.keys()) {
  •   console.log(iter[0] + ', ' + iter[1])
  • }

set()

  • 該方法有兩種使用方式,一個是傳入兩個參數,一個是傳入三個參數
  • formData.set(name, value)
  • formData.set(name, value, filename)
  • name
  •   - 字段名稱
  • value
  •   - 字段的值,若是是傳入兩個參數的方式,那麼該值是一個 USVString,若是不是,將被轉成一個字符串。若是是傳入三個參數的方式,那麼該值是一個布爾值 (Blob), 文件(File), 或者一個 USVString,若是不是,將被轉成一個字符串。
  • filename--可選
  •   - 當第二個參數傳遞的是一個blob對象(Blob)或者file對象(File),filename參數就表明傳給服務端的文件名(一個USVString)。Blob 對象的默認文件名是 "blob"。
  • formData.set('username', 'betiastar')

注意:若是對 FormData 對象插入一個 Blob 對象(Blob),那麼發送給服務器的請求頭部(header)裏的 "Content-Dispositon" 裏的文件名稱將會根據瀏覽器的不一樣而不一樣。code

values()

  • formData.values()
  • var formData = new FormData()
  • formData.append('key1', 'value1')
  • formData.append('key2', 'value2')
  • for(var value of formData.values()) {
  •   console.log(value)
  • }
相關文章
相關標籤/搜索