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、使用已有的表单来初始化一个对象实例
假如现在页面已经有一个表单
- <form id="myForm" action="" method="post">
- <input type="text" name="name">名字
- <input type="password" name="psw">密码
- <input type="submit" value="提交">
- </form>
我们可以使用这个表单元素作为初始化参数,来实例化一个formData对象
- // 获取页面已有的一个form表单
- var form = document.getElementById("myForm");
- // 用表单来初始化
- var formData = new FormData(form);
- // 我们可以根据name来访问表单中的字段
- var name = formData.get("name"); // 获取名字
- var psw = formData.get("psw"); // 获取密码
- // 当然也可以在此基础上,添加其他数据
- 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,
- formData.get("name"); // 获取key为name的第一个值
- formData.get("name"); // 返回一个数组,获取key为name的所有值
3.2 添加数据
我们可以通过append(key, value)来添加数据,如果指定的key不存在则会新增一条数据,如果key存在,则添加到数据的末尾
- formData.append("k1", "v1");
- formData.append("k1", "v2");
- formData.append("k1", "v1");
- formData.get("k1"); // "v1"
- formData.getAll("k1"); // ["v1","v2","v1"]
3.3 设置修改数据
我们可以通过set(key, value)来设置修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值。
- formData.append("k1", "v1");
- formData.set("k1", "1");
- formData.getAll("k1"); // ["1"]
3.4 判断是否该数据
我们可以通过has(key)来判断是否对应的key值
- formData.append("k1", "v1");
- formData.append("k2",null);
- formData.has("k1"); // true
- formData.has("k2"); // true
- formData.has("k3"); // false
3.5 删除数据
通过delete(key),来删除数据
- formData.append("k1", "v1");
- formData.append("k1", "v2");
- formData.append("k1", "v1");
- formData.delete("k1");
- formData.getAll("k1"); // []
3.6 遍历
我们可以通过entries()来获取一个迭代器,然后遍历所有的数据,
- 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}
可以看到返回迭代器的规则
每调用一次next()返回一条数据,数据的顺序由添加的顺序决定
返回的是一个对象,当其done属性为true时,说明已经遍历完所有的数据,这个也可以作为判断的依据
返回的对象的value属性以数组形式存储了一对key/value,数组下标0为key,下标1为value,如果一个key值对应多个value,会变成多对key/value返回
我们也可以通过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}
4. 发送数据
我们可以通过xhr来发送数据
- var xhr = new XMLHttpRequest();
- xhr.open("post","login");
- xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
- xhr.send(formData);
这种方式可以来实现文件的异步上传。
H5 FormData对象的更多相关文章
- H5 FormData对象的使用
XMLHttpRequest Level2 添加了一个新的接口--FormData .[ 主要用于发送表单数据,但也可以独立使用于传输键控数据.与普通的Ajax相比,它能异步上传二进制文件 ] 利用F ...
- H5 FormData对象的作用及用法
JS: function uploadFileAndParam() { var url = "http://localhost:42561/api/upload/UploadPost&quo ...
- H5 FormData对象的使用——进行Ajax请求并上传文件
XMLHttpRequest Level2 添加了一个新的接口——FormData .[ 主要用于发送表单数据,但也可以独立使用于传输键控数据.与普通的Ajax相比,它能异步上传二进制文件 ] 利用F ...
- 使用H5 formData对象上传图片和视频的文件时,必填的属性
async : false,cache : false,contentType : false,// 告诉jQuery不要去设置Content-Type请求头processData : false,/ ...
- 移动端通过ajax上传图片(文件)并在前台展示——通过H5的FormData对象
前些时候遇到移动端需要上传图片和视频的问题,之前一直通过ajax异步的提交数据,所以在寻找通过ajax上传文件的方法.发现了H5里新增了一个FormData对象,通过这个对象可以直接绑定html中的f ...
- FormData 对象上传二进制文件
使用jQuery 利用 FormData 上传文件:http://harttle.com/2016/07/04/jquery-file-upload.html 通过FormData对象可以组装 ...
- 利用H5 FormData 实现表单中多图上传(可带其他如String类型数据)
本篇的具体思路来源于右侧网址:http://blog.csdn.net/qq_19551571/article/details/49977983 本篇代码有所修改,请具体区分. 本篇使用的是 form ...
- .Net之使用Jquery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径
前言: 首先对于图片上传而言,在我们的项目开发中可以说出现的频率是相当的高的.这篇文章中,我将要描述的是在我们.Net中如何使用Jquery Ajax通过FormData对象异步提交图片文件到后台保存 ...
- 通过Ajax使用FormData对象无刷新上传文件
写在前面:本文说的这个方案有浏览器兼容性问题:所有主流浏览器的较新版本已经支持这个对象了,比如Chrome 7+.Firefox 4+.IE 10+.Opera 12+.Safari 5+,对兼容性比 ...
随机推荐
- 阶段3 1.Mybatis_02.Mybatis入门案例_1.mybatis的入门
H:\BaiDu\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\讲义+笔记+资料\主流框架\31.会员版(2.0)-就业课(2.0)-Mybatis\mybatis\mybatis_d ...
- Cloudera-JDBC-Driver-for-Impala
Cloudera-JDBC-Driver-for-Impala-Install-Guide-2-5-5.pdf https://github.com/FlowerBirds/flowerbirds.g ...
- Burp Suite批量网页操作
1.打开md5解密网站,并输入“21232F297A57A5A743894A0E4A801FC3”,不要点击[Decrypt It!] 1.启动Burp Suite,并设置浏览器代理 3.点击[Dec ...
- Java ——接口
本节重点思维导图 定义: public interface Traffic { public static final int sits = 4; public abstract void run() ...
- MySQL学习-基础练习题
day1 学生表操作: 1. 查询出班级205有多少个男生 2. 查询出名字为4个字的所有学生信息(编号.姓名,年龄,班级) 3. 查询出所有姓王的学生信息(编号.姓名,年龄,班级) 4. 查询出班级 ...
- Discrete Mathematics and Its Applications | 1 CHAPTER The Foundations: Logic and Proofs | 1.3 Propositional Equivalences
DEFINITION 1 A compound proposition that is always true,no matter what the truth values of the propo ...
- Ubuntu新建用户以及安装pytorch
环境:Ubuntu18,Python3.6 首先登录服务器 ssh username@xx.xx.xx.xxx #登录一个已有的username 新建用户 sudo adduser username ...
- python每日一练:0000题
**第 0000 题:**将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 示例代码: from PIL import Image,Imag ...
- 2.proxychains----Macchanger----anonsurf
nano /etc/proxychains.conf 激活dynamic_chain 同是启用proxy_dns 只启用IP会泄露DNS位置信息,别人就知道你在用匿名 ipconfig ifco ...
- MySQL数据库的特点和优势
MySQL数据库的特点和优势: 1.MySQL性能卓越.服务稳定,很少出现异常宕机. 2.MySQL开放源代码且无版权制约,自主性及使用成本低. 3.MySQL历史悠久,用户使用活跃,遇到问题可以寻求 ...