zoukankan      html  css  js  c++  java
  • H5 FormData对象

    FormData对象

    FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台。 在使用ajax提交时,使用FormData对象可以减少拼接queryString的工作量(queryString是查询字符串,http查询字符串由url中?后面的值指定)

    当页面上的form以GET方式向页面发送请求数据时 (如数据含有不安全字符,则浏览器先将其转换成16进制的字符再传送,如空格被转换成%20时 ) ,web server 将请求数据放入一名为QUERY_STRING的环境变量中。    Request.QueryString  方法是从这一环境变量中取出相应的值,并将被转成16进制的字符还原


    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传输)提供便利。

    2. 构造函数

    创建一个formData对象实例有几种方式

    1、创建一个空对象实例

    var formData = new FormData();

    此时可以调用append()方法来添加数据

    2、使用已有的表单来初始化一个对象实例

    假如现在页面已经有一个表单

    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对象

    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值。

    keyvalue
    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);

    这种方式可以来实现文件的异步上传。

  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/huancheng/p/9322579.html
Copyright © 2011-2022 走看看