H5 FormData對象

FormData對象

FormData對象,能夠把全部表單元素的name與value組成一個queryString,提交到後臺。 在使用ajax提交時,使用FormData對象能夠減小拼接queryString的工做量(queryString是查詢字符串,http查詢字符串由url中?後面的值指定)javascript

 

當頁面上的form以GET方式向頁面發送請求數據時 (如數據含有不安全字符,則瀏覽器先將其轉換成16進制的字符再傳送,如空格被轉換成%20時 ) ,web server 將請求數據放入一名爲QUERY_STRING的環境變量中。    Request.QueryString  方法是從這一環境變量中取出相應的值,並將被轉成16進制的字符還原html


 

 

var f = document.getElementById('upload').files;
this.$data.newAppPath = f[0].name;
this.$data.fileSize = f[0].size;
this.$data.newApp.file = f[0];
 
  
 
  
var f = document.getElementById('upload').files;
this.$data.newAppPath = f[0].name;
this.$data.fileSize = f[0].size;
this.$data.newApp.file = f[0];
this.$http({
 
  
    url:'/if/appsign_upload',
    method:'POST',
    body:fd
}).then(

FormData

1. 概述

FormData類型實際上是在XMLHttpRequest 2級定義的,它是爲序列化表以及建立與表單格式相同的數據(固然是用於XHR傳輸)提供便利。java

2. 構造函數

建立一個formData對象實例有幾種方式web

一、建立一個空對象實例ajax

var formData = new FormData();

此時能夠調用append()方法來添加數據數組

二、使用已有的表單來初始化一個對象實例瀏覽器

假如如今頁面已經有一個表單安全

  1.  
    <form id="myForm" action="" method="post">
  2.  
    <input type="text" name="name">名字
  3.  
    <input type="password" name="psw">密碼
  4.  
    <input type="submit" value="提交">
  5.  
    </form>

咱們可使用這個表單元素做爲初始化參數,來實例化一個formData對象app

  1.  
    // 獲取頁面已有的一個form表單
  2.  
    var form = document.getElementById("myForm");
  3.  
    // 用表單來初始化
  4.  
    var formData = new FormData(form);
  5.  
    // 咱們能夠根據name來訪問表單中的字段
  6.  
    var name = formData.get("name"); // 獲取名字
  7.  
    var psw = formData.get("psw"); // 獲取密碼
  8.  
    // 固然也能夠在此基礎上,添加其餘數據
  9.  
    formData.append( "token","kshdfiwi3rh");

3. 操做方法

首先,咱們要明確formData裏面存儲的數據形式,一對key/value組成一條數據,key是惟一的,一個key可能對應多個value。若是是使用表單初始化,每個表單字段對應一條數據,它們的HTML name屬性即爲key值,它們value屬性對應value值。異步

key value
k1 [v1,v2,v3]
k2 v4

3.1 獲取值

咱們能夠經過get(key)/getAll(key)來獲取對應的value,

  1.  
    formData.get( "name"); // 獲取key爲name的第一個值
  2.  
    formData.get( "name"); // 返回一個數組,獲取key爲name的全部值

3.2 添加數據

咱們能夠經過append(key, value)來添加數據,若是指定的key不存在則會新增一條數據,若是key存在,則添加到數據的末尾

  1.  
    formData.append( "k1", "v1");
  2.  
    formData.append( "k1", "v2");
  3.  
    formData.append( "k1", "v1");
  4.  
     
  5.  
    formData.get( "k1"); // "v1"
  6.  
    formData.getAll( "k1"); // ["v1","v2","v1"]

3.3 設置修改數據

咱們能夠經過set(key, value)來設置修改數據,若是指定的key不存在則會新增一條,若是存在,則會修改對應的value值。

  1.  
    formData.append( "k1", "v1");
  2.  
    formData.set( "k1", "1");
  3.  
    formData.getAll( "k1"); // ["1"]

3.4 判斷是否該數據

咱們能夠經過has(key)來判斷是否對應的key值

  1.  
    formData.append( "k1", "v1");
  2.  
    formData.append( "k2",null);
  3.  
     
  4.  
    formData.has( "k1"); // true
  5.  
    formData.has( "k2"); // true
  6.  
    formData.has( "k3"); // false

3.5 刪除數據

經過delete(key),來刪除數據

  1.  
    formData.append( "k1", "v1");
  2.  
    formData.append( "k1", "v2");
  3.  
    formData.append( "k1", "v1");
  4.  
    formData.delete( "k1");
  5.  
     
  6.  
    formData.getAll( "k1"); // []

3.6 遍歷

咱們能夠經過entries()來獲取一個迭代器,而後遍歷全部的數據,

  1.  
    formData.append( "k1", "v1");
  2.  
    formData.append( "k1", "v2");
  3.  
    formData.append( "k2", "v1");
  4.  
     
  5.  
    var i = formData.entries();
  6.  
     
  7.  
    i.next(); // {done:false, value:["k1", "v1"]}
  8.  
    i.next(); // {done:fase, value:["k1", "v2"]}
  9.  
    i.next(); // {done:fase, value:["k2", "v1"]}
  10.  
    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值

  1.  
    formData.append( "k1", "v1");
  2.  
    formData.append( "k1", "v2");
  3.  
    formData.append( "k2", "v1");
  4.  
     
  5.  
    var i = formData.entries();
  6.  
     
  7.  
    i.next(); // {done:false, value:"v1"}
  8.  
    i.next(); // {done:fase, value:"v2"}
  9.  
    i.next(); // {done:fase, value:"v1"}
  10.  
    i.next(); // {done:true, value:undefined}

4. 發送數據

咱們能夠經過xhr來發送數據

 
  1.  
    var xhr = new XMLHttpRequest();
  2.  
    xhr.open( "post","login");
  3.  
    xhr.setRequestHeader( "Content-Type","application/x-www-form-urlencoded");
  4.  
    xhr.send(formData);

這種方式能夠來實現文件的異步上傳。

相關文章
相關標籤/搜索