HTML5笔记——formData
注:formData中的数据在控制台上的console里面是打印不出来的,只能在控制台的network里面查看到具体的发送数据和发送选项
文章出处:梦想天空
XMLHttpRequest Level 2 添加了一个新的接口——FormData。
利用 FormData 对象,
我们可以通过 JavaScript 用一些键值对来模拟一系列表单控件,我们还可以使用 XMLHttpRequest 的 send() 方法来异步的提交表单。与普通的 Ajax 相比,使用 FormData 的最大优点就是我们可以异步上传二进制文件。
- 10大流行 Metro UI Bootstrap 主题和模板
- 精选12款优秀 jQuery Ajax 分页插件和教程
- 10大流行的 Metro UI 风格 Bootstrap 主题
- 8款效果精美的 jQuery 加载动画和进度条插件
- 推荐35款精致的 CSS3 和 HTML5 网页模板
创建一个FormData对象
你可以先创建一个空的 FormData
对象,然后使用 append()
方法向该对象里添加字段,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
var oMyForm = new FormData();
oMyForm.append( "username" , "Groucho" );
oMyForm.append( "accountnum" , 123456); // 数字123456被立即转换成字符串"123456"
// fileInputElement中已经包含了用户所选择的文件
oMyForm.append( "userfile" , fileInputElement.files[0]);
var oFileBody = "<a id=" a "><b id=" b ">hey!</b></a>" ; // Blob对象包含的文件内容
var oBlob = new Blob([oFileBody], { type: "text/xml" });
oMyForm.append( "webmasterfile" , oBlob);
var oReq = new XMLHttpRequest();
oReq.open( "POST" , "http://foo.com/submitform.php" );
oReq.send(oMyForm);
|
注:字段 "userfile" 和 "webmasterfile" 的值都包含了一个文件。通过 FormData.append()
方法赋给字段 "accountnum" 的数字被自动转换为字符(字段的值可以是一个 Blob
对象,File
对象或者字符串,剩下其他类型的值都会被自动转换成字符串)。
在该例子中,我们创建了一个名为 oMyForm 的 FormData 对象,该对象中包含了名为"username","accountnum","userfile" 以及 "webmasterfile" 的字段名,然后使用XMLHttpRequest
的 send()
方法把这些数据发送了出去。"webmasterfile" 字段的值不是一个字符串,还是一个 Blob
对象。
使用HTML表单来初始化一个FormData对象
可以用一个已有的 form 元素来初始化 FormData 对象,
只需要把这个 form
元素作为参数传入 FormData
构造函数即可:
1
|
var newFormData = new FormData(someFormElement);
|
例如:
1
2
3
4
|
var formElement = document.getElementById( "myFormElement" );
var oReq = new XMLHttpRequest();
oReq.open( "POST" , "submitform.php" );
oReq.send( new FormData(formElement));
|
你还可以在已有表单数据的基础上,继续添加新的键值对,如下:
1
2
3
4
|
var formElement = document.getElementById( "myFormElement" );
formData = new FormData(formElement);
formData.append( "serialnumber" , serialNumber++);
oReq.send(formData);
|
你可以通过这种方式添加一些不想让用户编辑的固定字段,然后再发送.
使用FormData对象发送文件
你还可以使用 FormData
来发送二进制文件.首先在 HTML 中要有一个包含了文件输入框的 form 元素:
1
2
3
4
5
6
7
8
9
10
|
<form enctype= "multipart/form-data" method= "post" name= "fileinfo" >
<label>Your email address:</label>
<input type= "email" autocomplete= "on" autofocus name= "userid" placeholder= "email" required size= "32" maxlength= "64" /><br />
<label>Custom file label:</label>
<input type= "text" name= "filelabel" size= "12" maxlength= "32" /><br />
<label>File to stash:</label>
<input type= "file" name= "file" required />
</form>
<div id= "output" ></div>
<a href= "javascript:sendForm()" >Stash the file!</a>
|
然后你就可以使用下面的代码来异步的上传用户所选择的文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function sendForm() {
var oOutput = document.getElementById( "output" );
var oData = new FormData(document.forms.namedItem( "fileinfo" ));
oData.append( "CustomField" , "This is some extra data" );
var oReq = new XMLHttpRequest();
oReq.open( "POST" , "stash.php" , true );
oReq.onload = function (oEvent) {
if (oReq.status == 200) {
oOutput.innerHTML = "Uploaded!" ;
} else {
oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.<br \/>" ;
}
};
oReq.send(oData);
}
|
你还可以不借助 HTML 表单,直接向 FormData
对象中添加一个 File
对象或者一个 Blob
对象:
1
|
data.append( "myfile" , myBlob);
|
如果 FormData 对象中的某个字段值是一个 Blob
对象,则在发送 HTTP 请求时,代表该 Blob
对象所包含文件的文件名的 "Content-Disposition" 请求头的值在不同的浏览器下有所不同,Firefox使用了固定的字符串"blob",而 Chrome 使用了一个随机字符串。
你还可以使用 jQuery 来发送 FormData,但必须要正确的设置相关选项:
1
2
3
4
5
6
7
8
9
|
var fd = new FormData(document.getElementById( "fileinfo" ));
fd.append( "CustomField" , "This is some extra data" );
$.ajax({
url: "stash.php" ,
type: "POST" ,
data: fd,
processData: false , // 告诉jQuery不要去处理发送的数据
contentType: false // 告诉jQuery不要去设置Content-Type请求头
});
|
浏览器兼容性
桌面端:
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 7+ | 4.0 (2.0) | 10+ | 12+ | 5+ |
支持filename 参数
|
(Yes) | 22.0 (22.0) | ? | ? | ? |
移动端:
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | 3.0 | ? | 4.0 (2.0) | ? |
12+ |
? |
支持filename 参数
|
? | ? | 22.0 (22.0) | ? | ? | ? |
参考文献:
- MDN:使用 XMLHttpRequest
- MDN:XMLHttpRequest FormData
- XMLHttpRequest 2 新技巧
- MDN:使用 FormData 对象
- W3C:XMLHttpRequest Level 2
转载于:https://www.cnblogs.com/MonaSong/p/5955950.html
HTML5笔记——formData相关推荐
- html5 上传 原理,浅谈使用HTML5的FormData上传文件原理!!!
[书山有路勤为径,学海无涯苦作舟] //一.FormData背景介绍 //表单提交,文件上传是一个常用又十分麻烦的功能,以前要上传文件通常都是借助插件或者flash来实现,噼里啪啦的加载一大堆东西.自 ...
- PHP结合HTML5使用FormData对象提交表单及上传图片
FormData 对象,可以把form中所有表单元素的name与value组成一个queryString,提交到后台.在使用Ajax提交时,使用FormData对象可以减少拼接queryString的 ...
- php form 上传_php+html5使用FormData对象提交表单及上传图片的方法
本文实例讲述了php+html5使用FormData对象提交表单及上传图片的方法.分享给大家供大家参考.具体分析如下: FormData 对象,可以把form中所有表单元素的name与value组成一 ...
- HTML5笔记+案例
HTML笔记 文件扩展名 Word.docx Excel.xlsx PPT.pptx 打开文件扩展名的方法: 或者: 一 . html简介 1.HTML是什么? HTML:Hyper Text Mar ...
- HTML5笔记加案例
软件安装篇 1.记笔记工具----typroa 文件名:基本文件名.扩展名 eg:SDN.docx 用word打开 销售统计表.xlsx 用excel打开 2.截图工具的安装 Greensho ...
- HTML5笔记案例结合
预备内容: 软件安装 1.安装笔记工具----typroa 文件名:基本文件名.扩展名 2,截图工具安装 3,sublimes----无需安 装 解压 将解压后的文件剪切到C盘 创建桌面快捷方式# H ...
- php 下 html5 XHR2 + FormData + File API 上传文件
FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...
- HTML5笔记(菜鸟教程)
写了一篇笔记了,觉得整个页面效果乱乱的,这篇文章就再改变一下试一下小节加粗康康有没有好一点.最近希望自己学习效率可以高一点再高一点,最近网课上的我负能量满满这样不好不好.不知道大家写博客的时候用的是M ...
- HTML5.笔记.案例
HTML 一 . html简介 1.HTML是什么? HTML:hyper text makrup language超文本标记(标签)语言由各种标签组成,用来制作网页,告诉浏览器该如何显示页面 2.作 ...
最新文章
- 卷积神经网络的“封神之路
- PAT甲级1036 Boys vs Girls:[C++题解] 字符串处理
- oracle回收ddl权限,oracle禁止指定用户DDL操作触发器
- 在使用Cocos2d-JS 开发过程中需要用到的单体设计模式
- Django学习笔记第三篇--关于响应返回
- 倒计时1天,BDTC2016最新完整版日程公布
- 在PyCharm下使用Jupyter Notebook
- 40个问题让你快速掌握Java多线程的精髓
- Tomcat 配置虚拟目录
- php arraymap 匿名函数,结合代码详细为你讲解,php中的array_map,array_walk以及匿名函数...
- DllRegisterServer调用失败的解决办法
- Emmagee性能测试小工具
- coreldraw教程入门零基础coreldraw下载coreldraw2019安装
- 华为云学院-人人学loT学习笔记- 第五章 操作系统 轻量开源
- Java 进阶 hello world! - 中级程序员之路
- Google服务器架构图解简析
- burp suite爆破模式操作心得
- linux删除文件夹(里面有文件)
- python和java对接数据的简单实现
- Java 实现sha_Java实现SHA-1算法实例
热门文章
- Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队
- Linux crontab定时执行任务
- 关于图连通性的几道题(水)
- xshell最多支持4个_中集拉钢卷专用挂车来了!自重5吨,最多能装4个钢卷
- matlab 图像坐标系
- ubuntu 编译mysql_Ubuntu编译MySQL5
- 汽车电子专业知识篇(三十二)-整车电控系统及架构设计技术
- 机器学习算法应用30篇(十一)-理解逻辑回归及二分类、多分类代码实践
- AUTOSAR从入门到精通番外篇(二)-一文读懂ld链接脚本文件
- 江西住建云实名认证怎么弄_王者荣耀无限时间怎么弄 2020年无限时间账号