FormData对象的使用
一、概述
FormData类型是XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据提供便利。
作用:1.利用一些键值对来模拟一系列表单控件:即将form中的所有表单元素的name和value组装成一个queryString;2.异步上传二进制文件。
与普通Ajax相比,使用FormData的最大优点:可以异步上传二进制文件。
二、使用
1.创建FormData对象方式
1).let formdata = new FormData(); 创建一个空的FormData对象,可以使用formdata.append(key,value)来添加数据。
2).let formdata = new FormData(form); 使用已有的表单来初始化一个FormData对象。
<form id="upload" method="post" action="">
<input type="text" name="username" value=""/>
<input type="password" name="paw" value=""/>
<input type="button" value="提交"/>
</form>
//获取一个form表单对象
let form = document.getElementById("form");
//用这个表单对象来初始化FormData对象
let formdata = new FormData(form);
//我们可以通过name来访问表单中的字段
formdata.get("username"); //获取username的值
formdata.get("pwd"); //获取pwd的值
//我们也可以添加数据
formdata.append("token","fegahgag54");
2.数据形式
首先,我们要明确FormData里面存储的数据形式,一对key/value组成一条数据,key是唯一的,一个key可能对应多个value。如果使用表单初始化FormData对象,每一个表单字段对应一条数据,他们的name属性值对应key值,value属性值对应value值。
3.操作方法
3.1获取数据 formdata.get(key)
formdata.get("username"); //获取key为username的第一个值
formdata.getAll("username"); //获取key为username的所有值,返回一个数组
3.2添加数据 formdata.append(key,value)
formdata.append("k1","v1");
formdata.append("k1","v2");
formdata.append("k2","v2"); formdata.getAll("k1"); //["v1","v2"]
formdata.get("k2"); //"v2"
3.3设置/修改数据 formdata.set(key,value)如果key不存在则新增一条数据,如果存在,则会修改对应的value值。
formdata.append("k1","v1");
formdata.set("k1","v2");
formdata.get("k1"); //"v2"
3.4判断是否存在某条数据 formdata.has(key),存在返回true,不存在返回false。
formdata.append("k1","v1");
formdata.has("k1"); //true
formdata.has("k2"); //false
3.5删除数据 formdata.delete(key);
formdata.append("k1","v1");
formdata.delete("k1");
formdata.get("k1"); //null
3.6遍历 通过entries()或values()来获取一个遍历器
formdata.append("k1","v1");
formdata.append("k2","v2");
for(let [key,value] of formdata.entries()){
console.log(key +":"+ value)
}
输出:
"k1:v1"
"k2:v2"
formdata.append("k1","v1");
formdata.append("k2","v2");
for(let value of formdata.values()){
console.log(value)
}
输出:
"v1"
"v2"
4.发送数据(上传文件不刷新页面)
<input type="file" id="upload"/>
<input type="button" id="upload-btn" value="上传"/>
let btn = document.getElementById("upload-btn");
btn.onclick = function(){
let file = document.getElementById("upload");
let formdata = new FormData();
formdata.append("file",file.files[0]);
fetch("https://www.baidu.com",{
method:'POST',
body:formdata
}).then(d=>{
console.log("result is" + d);
alert("上传成功");
})
}
三、浏览器兼容性
参考:
https://www.cnblogs.com/lhb25/p/html5-formdata-tutorials.html
https://segmentfault.com/a/1190000012327982
https://segmentfault.com/a/1190000006716454
FormData对象的使用的更多相关文章
- 通过Ajax使用FormData对象无刷新上传文件
写在前面:本文说的这个方案有浏览器兼容性问题:所有主流浏览器的较新版本已经支持这个对象了,比如Chrome 7+.Firefox 4+.IE 10+.Opera 12+.Safari 5+,对兼容性比 ...
- H5 FormData对象的使用
XMLHttpRequest Level2 添加了一个新的接口--FormData .[ 主要用于发送表单数据,但也可以独立使用于传输键控数据.与普通的Ajax相比,它能异步上传二进制文件 ] 利用F ...
- html5的FormData对象和input的file属性以及window.URL.createObjectURL( ) 方法(转载)
/** FormData ==>表单数据 能自动把表单数据拼接打包 当ajax发送数据时,发送打包的数据; 还可以使用FormData对象的append(key,value)添加数据 FormD ...
- HTML的FormData对象
FormData是HTML5标准制定的一个新的封装对象,有了FormData对象,可以方便地通过javascript创建表单数据,直接以ajax发送到服务器中. 目前浏览器的支持情况为: 详细的介绍与 ...
- 通过jQuery Ajax使用FormData对象上传文件
FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". 在 Mozilla Developer 网站 使用For ...
- FormData对象
FF4中增加了一个很有意思的对象,FormData.通常我们提交(使用submit button)时,会把form中的所有表格元素的name与value组成一个queryString,提交到后台.这用 ...
- Ajax发送FormData对象封装的表单数据
前端页面: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...
- 使用JS的FormData对象
利用FormData对象,你可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". 创建一个FormData对象 你可以先创建一个空的F ...
- FormData+Ajax 实现多文件上传 学习使用FormData对象
FormData对象是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利. 今天我们使用dropzone和FormData实现多文件上传功能. var SAMP = null; / ...
- 使用HTML5 FormData对象实现大文件分块上传(断点上传)功能
FormData是HTML5新增的一个对象,通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对.它可以更灵活方便的发送表单数据,因为可以独立于表单使用.如果你把表单 ...
随机推荐
- [ 9.28 ]CF每日一题系列—— 940A规律构造
Description: 输入a,b,x,给你a个0,b个1,你要给出一个组合,让这个组合里存在x位,使得这x为和其x+1位不相等 Solution: 因为肯定有一个正确的答案,所以钻了一下空子,贪心 ...
- RabbitMQ与消息总线
Windows环境安装RabbitMQ,https://www.cnblogs.com/xibei666/p/5931267.html 1.消息发送流程 using System; using Sys ...
- 【转】学习Java虚拟机没用? 听听当事人是怎么说的!
我是大名鼎鼎的Java 虚拟机, 据说这个星球上每天有900多万程序员和我打交道,这真是一个惊人的数字. 这900多万人中不少人对我的技术内幕非常感兴趣, 有事儿没事儿都要把我“大卸八块”, 深入了 ...
- TensorFlow 神经网络教程
TensorFlow 是一个用于机器学习应用程序的开源库.它是谷歌大脑的第二代系统,在取代了近源的 DistBelief 之后,被谷歌用于研究和生产应用.TensorFlow 提供了很多种语言接口,包 ...
- JS应用实例6:二级联动
本案例很常用,应用场景:注册页面填写籍贯,省市二级联动 总体思想:创建一个二维数组存入省市,获取选中的省份并比较,创建标签遍历添加 代码: <!DOCTYPE html> <html ...
- IDEA搭建SSM实现登录、注册,数据增删改查功能
本博文的源代码:百度云盘/java/java实例/SSM实例/SSM实现登录注册,增删改查/IDEA搭建SSM实现登录,注册,增删改查功能.zip 搭建空的Maven项目 使用Intellij id ...
- Tomcat简介
Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 如果你学过html,css,你会知道你写的页面只能自己访问,别人不能远程访 ...
- logstash grok 内置正则
参考地址:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns USERNAME [a-zA-Z0-9._-]+ ...
- mysql 开发进阶篇系列 26 数据库RPM安装演示
一.概述 上一章讲到了RPM安装后的文件目录,这章还是介绍下安装步骤.也便以后做参考吧. 1. 移出centos 7系统自带的mysql库 yum remove mysql-libs 2. 将下载的m ...
- 使用crypt配置Basic Auth登录认证
简介 Basic Auth用于服务端简单的登录认证,通常使用服务器Nginx.Apache本身即可完成.比如我们要限定某个域名或者页面必须输入用户名.密码才能登录,但又不想使用后端开发语言,此时Bas ...