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请求头
});

浏览器兼容性

  桌面端:

FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support7+4.0 (2.0)10+12+5+
支持filename参数(Yes)22.0 (22.0)???

  移动端: 

FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support3.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 学习随记——==和===及常见元素的真假值

“” 和 “” 符合的使用 <script>/*** 表示可以经过自动转换&#xff0c;比较的是数值*///example01if(1 true && false 0 && true 1){console.log(1true);console.log(" 比较的是等号两边数据的值是否相等&#xff08;可以经过自动转换&#…

运维祈求不宕机_[国庆特辑] 程序员应该求谁保佑才能保证不宕机?

一年国庆又到&#xff5e;程序猿、运维工程师、利用假期该结婚的结婚&#xff0c;该回老家的回老家。产品经理、项目经理们也要出国旅游了(好像这次是去东京玩)&#xff0c;并且叮嘱一定要安排好值班表。我是个程序员&#xff0c;我也想出国旅游&#xff0c;却觉得有点儿贵。多…

Oracle Weblogic 11g(10.3.4)的小知识

本周&#xff0c;我将为Weblogic进行许多设置和配置&#xff08;我猜是开发人员&#xff09;。 在过去的4年中&#xff0c;我一直在与Weblogic合作&#xff0c;并且我不得不承认-与Eclipse类似-我已经开始使用它。 我曾经是Netbeans / JBoss开发人员&#xff0c;后来转向Eclips…

java中HashMap的用法

重点介绍HashMap。首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的&#xff0c;而在Map中我们通过对象来对对象进行索引&#xff0c;用来索引的对象叫做key&#xff0c;其对应的对象叫做value。在下文中会有例子具体说明。 再来看看HashMap和TreeMap有什么…

关于 MVCC 的基础

作为第一篇对 MVCC 的学习材料&#xff0c;以下内容翻译自 Wikipedia。 1. 什么是MVCC 1.1 基础概念 MVCC&#xff0c;Multi-Version Concurrency Control&#xff0c;多版本并发控制。MVCC 是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的…

集成测试CDI 1.0和Spring 3.1中的作用域bean

在这篇博客文章中&#xff0c;我描述了如何在Spring和CDI中使用作用域bean进行集成测试。 一切都用小代码示例进行说明。 使用范围进行集成测试并不是特别容易。 想象一下存在于会话范围内的bean&#xff0c;例如UserCredentials 。 在集成测试中&#xff0c;通常没有HttpReque…

JavaScript学习随记——数组一

数组的创建及length属性 <script type"text/javascript" charset"utf-8">// 数组创建方式一,此种方式写的时候比较麻烦var arrnew Array();// 数组创建方式二var arr [1,2,3,4,true,str,new Date()];console.log("arr.length&#xff1a;"…

USACO milk4 枚举答案再检验

刚开始写了一个暴力的dfs超时了&#xff0c; 最后看了下题解说是先枚举答案再判断&#xff0c;然后就写了双dfs&#xff0c;全部秒杀&#xff0c;代码如下&#xff1a; /*ID: m1500293LANG: CPROG: milk4 */ #include <cstdio> #include <cstring> #include <al…

微信小程序常见问题集合(长期更新)

最新更新&#xff1a; 新手跳坑系列&#xff1a;推荐阅读&#xff1a;《二十四》request:fail错误&#xff08;含https解决方案&#xff09;&#xff08;真机预览问题 跳坑指南《七十》如何让微信小程序服务类目审核通过跳坑六十九&#xff1a;uploadFile:fail Error: unable t…

mysql指令按顺序排列_mysql基本语法大全

1.备份数据库&#xff1a;1.1备份数据库中的表:mysqldump -u root -p test a b >d:\bank_a.sql//分别备份数据库test下a和b表1.2备份一个数据库mysqldump -u root -p test > d:\testbk.sql1.3备份多个数据库mysqldump -u root -p --databases test mysql > D:\data.sq…

Spring和石英:多作业计划服务

作业调度对于应用程序来说是如此重要。 尤其是在大型项目中&#xff0c;处理大量工作可能是一个问题。 Spring和Quartz为解决该问题带来了巨大的好处。 本文介绍了如何通过使用Spring和Quartz轻松地计划多个作业。 二手技术&#xff1a; JDK 1.6.0_21 春天3.1.1 石英1.8.5 M…

JavaScript学习随记——数组二

数组indexOf(arg) 和 lastIndexOf(arg)方法使用 <script type"text/javascript" charset"utf-8">/*** indexOf(arg):返回指定参数在数组中的索引位置&#xff08;从前往后查&#xff0c;比较是使用 ‘’&#xff0c;查询到立即返回索引位置&#xff…

反射的简单应用

首先有一个类 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Threading.Tasks;6 7 namespace ConsoleApplication18 {9 public class demo 10 { 11 public string name "程序员"; 12…

JavaFX 2.0示例介绍书

我最近完成了有关JavaFX 2.0 SDK新版本的书的编写&#xff0c;并且已经将它放在您附近的书店&#xff08; Amazon &#xff09;的书架上。 该书将逐步指导您完成JavaFX 2.0的来龙去脉。 当您遇到一章时&#xff0c;将看到一些菜谱&#xff0c;这些菜谱将带来一个问题&#xff0…

双纵坐标的绘图命令_工程师绘图必备软件——OriginLab 2019b

点击右上角关注&#xff0c;尽享后续精品软件OriginLab 2019b是OriginLab OriginPro 2019版本的加强版&#xff0c;这个软件对于许多人来讲并不陌生&#xff0c;可以说是科学家和工程师的绘图必备软件。新的版本也带来许多改变&#xff0c;软件拥有多种功能&#xff0c;这个版本…

JavaScript学习随记——对象

JS中对象基本使用 <script type"application/javascript" charset"utf-8">//Objcet 所有类的基础类/*** 创建对象方式一*/ // var objnew Objcet();/** 创建对象方式二,注意 {}不可忘记写* */var obj {};obj.name "什码情况";obj.age …

[转]Java_List元素的遍历和删除

原文地址:http://blog.csdn.net/insistgogo/article/details/19619645 1、创建一个ArrayList [java] view plainList<Integer> list new ArrayList<Integer>(); 2、List常用的遍历方法有三种&#xff1a; &#xff08;1&#xff09;下标循环 [java] view plainfo…

分层设计 --java中的几种包

对于刚接触包分层的同学&#xff0c;下面简单介绍一下java中各个层次&#xff1a; Modle 模型层 &#xff1a;存放你的实体类 dao&#xff1a;主要做数据库的交互工作&#xff0c;具体的增删改查等方法&#xff0c;操作数据库的&#xff1b;这里也可以存放查询所有的信息接口 …

Spring远程支持和开发RMI服务

Spring远程支持简化了启用远程服务的开发。 当前&#xff0c;Spring支持以下远程技术&#xff1a;远程方法调用&#xff08;RMI&#xff09;&#xff0c;HTTP调用程序&#xff0c;Hessian&#xff0c;Burlap&#xff0c;JAX-RPC&#xff0c;JAX-WS和JMS。 远程方法调用&#xf…

cesium绘制网格_Cesium学习笔记-工具篇37-风场绘制

这两天重新接触到流场&#xff0c;于是研究下&#xff0c;在大牛们的轮子上也算实现了效果&#xff1a;1二维2三维主要参考以下三篇文章&#xff1a;《WebGL风向图》给出制作风向图通常步骤&#xff1a;1. 在屏幕上生成一系列随机粒子位置并绘制粒子。2. 对于每一个粒子&#x…