博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FormData 对象的使用
阅读量:6241 次
发布时间:2019-06-22

本文共 3185 字,大约阅读时间需要 10 分钟。

FormData 对象的使用

通过FormData对象可以组装一组用 发送请求的键/值对。它可以更灵活方便的发送表单数据,因为可以独立于表单使用。如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过 方法传输的数据格式相同

如何创建一个FormData对象

你可以自己创建一个FormData对象,然后通过调用它的方法添加字段,就像这样:

var formData = new FormData();formData.append("username", "Groucho");formData.append("accountnum", 123456); // 数字 123456 会被立即转换成字符串 "123456"// HTML 文件类型input,由用户选择formData.append("userfile", fileInputElement.files[0]);// JavaScript file-like 对象var content = 'hey!'; // 新文件的正文...var blob = new Blob([content], { type: "text/xml"});formData.append("webmasterfile", blob);var request = new XMLHttpRequest();request.open("POST", "http://foo.com/submitform.php");request.send(formData);
注意:字段 "userfile" 和 "webmasterfile"  都包含一个文件. 字段 "accountnum" 是数字类型,它将被
方法转换成字符串类型(
 对象的字段类型可以是  ,  , 或者 string: 
如果它的字段类型不是Blob也不是File,则会被转换成字符串类型。

上面的示例创建了一个实例,包含"username", "accountnum", "userfile" 和 "webmasterfile"四个字段,然后使用XMLHttpRequest的方法发送表单数据。字段 "webmasterfile" 是 类型。一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式。  接口基于Blob,继承 blob功能并将其扩展为支持用户系统上的文件。你可以通过  构造函数创建一个Blob对象。

通过HTML表单创建FormData对象

想要构造一个包含Form表单数据的FormData对象,需要在创建FormData对象时指定表单的元素。

var formData = new FormData(someFormElement);示例:var formElement = document.querySelector("form");var request = new XMLHttpRequest();request.open("POST", "submitform.php");request.send(new FormData(formElement));

你还可以在创建一个包含Form表单数据的FormData对象之后和发送请求之前,附加额外的数据到FormData对象里,像这样:

var formElement = document.querySelector("form");var formData = new FormData(formElement);var request = new XMLHttpRequest();request.open("POST", "submitform.php");formData.append("serialnumber", serialNumber++);request.send(formData);

这样你就可以在发送请求之前自由地附加不一定是用户编辑的字段到表单数据里

使用FormData对象上传文件

你还可以使用FormData上传文件。使用的时候需要在表单中添加一个文件类型的input:

然后使用下面的代码发送请求:

var form = document.forms.namedItem("fileinfo");form.addEventListener('submit', function(ev) {  var oOutput = document.querySelector("div"),      oData = new FormData(form);  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 when trying to upload your file.
"; } }; oReq.send(oData); ev.preventDefault();}, false);

注意:如果FormData对象是通过表单创建的,则表单中指定的请求方式会被应用到方法open()中 。

你还可以直接向FormData对象附加File或Blob类型的文件,如下所示:

data.append("myfile", myBlob, "filename.txt");

使用appned()方法时,可以通过第三个可选参数设置发送请求的头 Content-Disposition 指定文件名。如果不指定文件名(或者不支持该参数时),将使用名字“blob”。

如果你设置正确的配置项,你也可以通过jQuery来使用FormData对象:

var fd = new FormData(document.querySelector("form"));fd.append("CustomField", "This is some extra data");$.ajax({  url: "stash.php",  type: "POST",  data: fd,  processData: false,  // 不处理数据  contentType: false   // 不设置内容类型});

通过AJAX提交表单和上传文件可以不使用FormData对象

如果你想知道不使用FormData对象的情况下,通过序列化和提交表单 。

本文转载于mdn:

转载于:https://www.cnblogs.com/beileixinqing/p/7483424.html

你可能感兴趣的文章
Angular开发实践(七): 跨平台操作DOM及渲染器Renderer2
查看>>
Laravel 教程 - 实战 iBrand 开源电商 API 系统
查看>>
vue-cli的坑,loader重复的锅 Invalid CSS after "...load the styles"
查看>>
手写Spring之IOC基于xml动态创建对象
查看>>
聊聊reactive streams的tranform操作
查看>>
箭头函数与this
查看>>
Angular4学习笔记之DOM属性绑定
查看>>
java构造list,合并重复的数组
查看>>
紫书第四章例4-4信息解码Message Decoding (处理二进制字符的一种典型例题)
查看>>
一些杂感杂想(三)打理业余时间的一点个人心得
查看>>
Apache Kylin安装部署
查看>>
JavaScript的async 的学习
查看>>
SpringCloud(第 021 篇)Zuul 的过滤器 ZuulFilter 的使用
查看>>
JavaScript笔记——闭包
查看>>
gRPC 初探
查看>>
SpringBoot非官方教程 | 第六篇:SpringBoot整合mybatis
查看>>
dataguard备库出现GAP修复
查看>>
OOD、DIP、IOC、DI、依赖注入容器(即 控制反转容器,IOC Container)
查看>>
Linux常用命令
查看>>
Grub4Dos 手动引导指令
查看>>