HTML5笔记——formData

注:formData中的数据在控制台上的console里面是打印不出来的,只能在控制台的network里面查看到具体的发送数据和发送选项

文章出处:梦想天空

XMLHttpRequest Level 2 添加了一个新的接口——FormData利用 FormData 对象,我们可以通过 JavaScript 用一些键值对来模拟一系列表单控件,我们还可以使用 XMLHttpRequest 的 send() 方法来异步的提交表单。与普通的 Ajax 相比,使用 FormData 的最大优点就是我们可以异步上传二进制文件。

您可能感兴趣的相关文章

创建一个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) ? ? ?

参考文献:

时间: 2024-10-28 13:19:30

HTML5笔记——formData的相关文章

HTML5笔记3——Web Storage和本地数据库

上一篇:HTML5笔记2——HTML5音/视频标签详解 Web Storage概述 在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以再客户端本地保存数据的Web Storage功能,之前可以使用Cookies在客户端 保存诸如用户名等简单用户信息,但通过长期使用,人们发现使用Cookies存储永久数据存在几个问题. 大小:Cookies的大小被限制在4KB 带宽:Cookies是随HTTP失误一起被发送的,因此会浪费一部分发送Cookies时使用的带宽 复杂性:要正确的

利用Jquery使用HTML5的FormData属性实现对文件的上传

1.利用Jquery使用HTML5的FormData属性实现对文件的上传 在HTML5以前我们如果需要实现文件上传服务器等功能的时候,有时候我们不得不依赖于FLASH去实现,而在HTML5到来之后,我们很容易的实现对文件的上传,只需要利用HTML5的一个FormData属性,结合Jquery就很容易实现文件的上传,而且读取文件的上传进度,下面这个上传案例就是基于上面所说的实现的,下面我将所所有的JS和CSS以及HTML页面代码放在下面. 注意事项:FormData属性必须依赖于HTML5,所以如

php 下 html5 XHR2 + FormData + File API 上传文件

FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormData的最大优点就是我们可以异步上传一个二进制文件. 例1如下: <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>

Html5笔记 表格 布局

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>HTML5学习笔记</title> <style type="text/css"> p{ color: #ffff00; } body { margin: 0px; } #container { width: 100%; he

HTML5 jQuery+FormData 异步上传文件,带进度条

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link href="../resources/css/common.css" rel="stylesheet" /> <script src="../resources/js/jquery-2.1.4.js"></script> <

HTML5笔记-加强版

新增的语法结构表单验证 1.新的页面结构以及宽松的语法规范:<!doctype html> <meta charset="utf-8"/> 2.新的结构化元素:语义化标签: <header></header> 页眉.主要用于页面的头部的信息介绍,也可用于板块头部 <hgroup></hgroup> 页面上的一个标题组合.一个标题和一个子标题,或者标语的组合 <hgroup> <h1>妙味课堂

HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的整理思路,写到博客里还能做个备忘. 1) 跨域通讯 现在做企业项目,前端很不自然的会大量使用iframe标签,我以前在文章里提到iframe是一个效率极其低下的标签,但是如果项目没有什么性能的苛求,使用iframe还是非常的方便的. 使用iframe经常碰到父子窗体通讯的问题,我们看看下面的代码:

HTML5笔记之——视频

一.HTML5视频 1.支持的格式 2.格式 <video src="movie.ogg" width="320" height="240" controls="controls"> Your browser does not support the video tag. </video> control 属性供添加播放.暂停和音量控件. <video> 与 </video> 之

HTML5笔记(一)

1.HTML5提供了一些新的元素和属性,例如<nav>(网站导航块)和<footer>.这些标签较有利于搜索引擎的索引整理,同时更好的帮助小屏幕装置和视频人士使用,除此之外,还为其他浏览要素提供了新的功能.如<audio>和<video>标记. 2.一些过时的HTML4标记将被取消.其中包括纯粹显示效果的标记,如<font>和<center>.他们已经被cSS 取代. 3.<video>标记 定义和用法: <vide