使用FormData对象

2023-11-08

使用FormData对象


  • TAGS 
  • 文件

利用FormData对象,你可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单".

创建一个FormData对象

你可以先创建一个空的FormData对象,然后使用append()方法向该对象里添加字段,如下:

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"的字段名,然后使用XMLHttpRequestsend()方法把这些数据发送了出去."webmasterfile"字段的值不是一个字符串,还是一个Blob对象.

使用HTML表单来初始化一个FormData对象

可以用一个已有的<form>元素来初始化FormData对象,只需要把这个form元素作为参数传入FormData构造函数即可:

var newFormData = new FormData(someFormElement);
  
  

例如:

var formElement = document.getElementById("myFormElement");
var oReq = new XMLHttpRequest();
oReq.open("POST", "submitform.php");
oReq.send(new FormData(formElement));
  
  
  
  
  
  
  
  

你还可以在已有表单数据的基础上,继续添加新的键值对,如下:

var formElement = document.getElementById("myFormElement");
formData = new FormData(formElement);
formData.append("serialnumber", serialNumber++);
oReq.send(formData);
  
  
  
  
  
  
  
  

你可以通过这种方式添加一些不想让用户编辑的固定字段,然后再发送.

使用FormData对象发送文件

你还可以使用FormData来发送二进制文件.首先在HTML中要有一个包含了文件输入框的form元素:

<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>
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

然后你就可以使用下面的代码来异步的上传用户所选择的文件:

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对象:

data.append("myfile", myBlob);
  
  

如果FormData对象中的某个字段值是一个Blob对象,则在发送http请求时,代表该Blob对象所包含文件的文件名的"Content-Disposition"请求头的值在不同的浏览器下有所不同,Firefox使用了固定的字符串"blob,"而Chrome使用了一个随机字符串.

你还可以使用jQuery来发送FormData,但必须要正确的设置相关选项:

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请求头
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用FormData对象 的相关文章

  • Java API操作HDFS文件,利用Junit单元测试

    操作HDFS文件 约有以下两种方法 1 shell 这个相信大家基本都会 2 Java API 的操作 这次主要记录下Java API操作HDFS文件的相关测试 环境 IDEA JDK10 0 1 虚拟机centos 版本 hadoop2
  • XML 和 JSON 学习笔记(基础)

    XML Why XML 的出现背景 在实际开发中 不同语言 如Java JavaScript等 的应用程序之间数据传递的格式不同 导致它们进行数据交换时很困难 XML就应运而生了 XML 是一种通用的数据交换格式 可以十分方便地实现格式交换
  • 亚稳态的消除及解决方法

    亚稳态产生 我们就要对亚稳态进行消除 常用对亚稳态消除有三种方式 1 对异步信号进行同步处理 2 采用FIFO对跨时钟域数据通信进行缓冲设计 3 对复位电路采用异步复位 同步释放方式处理 1 对异步信号进行同步处理 input sig ns
  • ConnectionString 属性尚未初始化

    ConnectionString 属性尚未初始化 的另类解决办法现在稍微熟悉Asp net的朋友都习惯把数据库连接配置写到web config中 这样的优点主要是能随时更改数据库配置 比如帐号密码 而不用再编译 web config中的数据
  • 古典概型——概率论与数理统计(宋浩)

    事件的概率 1 2 1概率的初等描述 概率的定义 事件发生的可能性的大小 P A 性质 P 1 P 0 规范性 0 lt P A lt 1 非负性 有限可加 A1 A2 A3 An互不相容 P A1 A2 A3 A4 P A1 P A2 P
  • GO面试必须得会的137个面试题

    go的调度 go struct能不能比较 因为是强类型语言 所以不同类型的结构不能作比较 但是同一类型的实例值是可以比较的 实例不可以比较 因为是指针类型 go defer for defer 先进后出 后进先出 func b for i
  • WIN10驱动程序的卸载与更新

    方法一 在设备管理器中找到对应驱动 右键选择 卸载 记得勾选删除此设备的驱动程序软件 然后点击确定 这一步删除了旧得问题驱动 重装得时候就可以根据需要自己选择如何安装驱动了 方法二 以官网下载无线网卡驱动为例 https downloadc
  • VS2012 error C2668: “sqrt”: 对重载函数的调用不明确-已解决

    源程序如下 include
  • Kubernetes RBAC 为指定用户授权访问不同命名空间权限

    在开启了 TLS 的集群中 每当与集群交互的时候少不了的是身份认证 使用 kubeconfig 即证书 和 token 两种认证方式是最简单也最通用的认证方式 以kubectl为例介绍kubeconfig的配置 kubectl只是个go编写
  • pytorch 多GPU训练

    代码库地址 mnist 目录 普通单机单卡训练流程 DDP分布式训练 horovod方式 普通单机单卡训练流程 以mnist为例 主要包括数据加载 模型构建 优化器和迭代训练等部分 import argparse import torch
  • Csharp:字符串操作

    public class StringControl
  • C++中的map

    1 简介 2 pair类型 2 1 pair类型的定义和初始化 2 2 pair对象的一些操作 3 map基本操作 3 1 头文件 3 2 创建map对象 3 3 map元素访问 3 3 1 使用下标 访问 3 3 2 使用 at 方法访问
  • matlab——三元二次函数求最值

    fmincon函数 今天晚上帮姐姐求一个方程的最值 果断用matlab啊 刚开始想得挺简单的 就是for循环 后来一想计算量太大 百度了一下都是用fmincon这个函数 可是算出来的是最小值 然后又找求最大值的函数 可是找了半天没找到 最后
  • 右键菜单添加命令行,右键菜单增加editplus

    我们在运行中输入cmd命令 默认的输入路径是 C Documents and Settings Administrator 而我们所用工具的安装路径常常不在这个路径下 这样会为一些命令的输入造成麻烦 下面通过修改注册表解决这个麻烦 运行 r
  • 机器学习——KNN算法

    机器学习 KNN算法 文章目录 机器学习 KNN算法 前言 一 KNN原理基础 二 sklearn的基本建模流程 三 KNN算法调优 选取最优的K值 四 KNN中距离的相关讨论 1 KNN使用的是什么距离 2 距离类模型的归一化需求 五 K
  • 快速对比UART、SPI、I2C通信的区别与应用

    参考 带你快速对比SPI UART I2C通信的区别与应用 作者 一口Linux 网址 https mp weixin qq com s 4 RSM2jk2W6nTboO1W8HCw 电子设备之间的通信就像人类之间的交流 双方都需要说相同的
  • webpack进阶--01--环境变量的设置

    环境变量的设置 在用webpack作为打包工具的项目中 环境变量共有三种 node运行时的环境变量 webpack配置对象的环境变量 js运行时的环境变量 node运行时的环境变量 在node环境中 通过process env可以获取nod
  • 【Redux】通过示例和简化源码深入了解Redux原理

    createStore 作用 创建一个包含程序完整 state 树的 Redux store 应用中应有且仅有一个 store Store 就是用来维持应用所有的 state 树 的一个对象 改变 store 内 state 的惟一途径是对
  • 梯度下降算法3维图像示例

    import numpy as np import matplotlib pyplot as plt import matplotlib pylab as mpl from mpl toolkits mplot3d import Axes3
  • 华为MSTP负载均衡配置示例

    华为MSTP负载均衡配置示例 https www cnblogs com zhuimengle p 5906806 html MSTP负载均衡配置示例 本示例拓扑结构如图8 38所示 SwitchA SwitchB SwitchC和Swit

随机推荐

  • WEB-INF下的jsp不能访问的问题

    放在Tomcat WEB INF目录下的文件 image png 当浏览器访问Result jsp时 无法正常显示 通过了解才得知 原来Tomcat WEB INF目录下的文件 浏览器一般无法直接方法 只能通过重定向后才可以访问 如果需要直
  • 象棋对战js代码实现

    象棋对战js代码实现 思路 1 将棋盘设置为背景图片 对背景图片进行分割 分为9行10列的div块 每一块都是棋子的一个位置 2 对每一个div块设置onclick点击事件 每次点击div块都会调用判断棋子的走法是否合理的函数 pandua
  • Spark2.0特征提取、转换、选择之一:数据规范化,String-Index、离散-连续特征相互转换

    数据规范化 标准化 在数据预处理时 这两个术语可以互换使用 不考虑标准化在统计学中有特定的含义 下面所有的规范化操作都是针对一个特征向量 dataFrame中的一个colum 来操作的 首先举一个例子 MaxAbsScaler例子 参考后面
  • Unity基于C#事件委托机制

    事件委托是一种用于实现观察者模式的设计模式 它允许对象在发生特定事件时通知其他对象 在Unity中 事件委托机制为开发者提供了一种简单而有效的方式来处理游戏中的事件和交互 对啦 这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白
  • python算术运算符

    运算符 描述 实例 加 1 1 2 减 3 2 1 乘 2 3 6 除 4 2 2 取整除 返回除法的整数部分 商 9 2 4 取余数 返回除法的余数 9 2 1 幂 又称次方 乘方 2 3 8 算术运算符的优先级 运算符 描述 幂 最高优
  • 区块链的优缺点

    区块链的优点 一是难以篡改 更加安全 在传统信息系统的安全方案中 安全依赖于层层设防的访问控制 通过区块链技术 记录交易的数据库任何人都可以访问 但由于巧妙的设计并辅以密码学和共识机制 区块链的数据记录方式使得修改某一数据需要变更所有的后续
  • TypeError: cannot unpack non-iterable NoneType object

    python报错如下 TypeError cannot unpack non iterable NoneType object 解决方法 报错的原因是函数返回值得数量不一致 查看函数返回值数量和调用函数时接收返回值的数量是不是一致 修改一致
  • Java出现"此时不应有......."的错误

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今晚在安装weblogic的时候 双击运行startWebLogic cmd dos窗口一闪而过 随后将 startWebLogic cmd 拖进cmd窗口运行 显示 此时
  • Android 不同版本通过mk拷贝并安装APK

    目录 前景 解决思路 注意事项 Android 11 Android 9 前景 工作中 有时APK通过系统编译的方式包进系统会丢失so库或者lib包 导致APK无法正常运行 但手动安装就不会出现这个问题 解决思路 可以使用一个取巧的方式解决
  • 无桥PFC的家族推演

    1 组合法构建无桥PFC PFC是一种AC DC变换器 将交流输入电压分成正负半周 输出电压是直流 因此AC DC变换器可以当做是两个DC DC变换器的组合 在PFC的拓扑推演中 就是设计两个DC DC变换器的工作模式 以下内容是基于对陈正
  • 遗传编程(GA,genetic programming)算法初探,以及用遗传编程自动生成符合题解的正则表达式的实践...

    1 遗传编程简介 0x1 什么是遗传编程算法 和传统机器学习算法有什么区别 传统上 我们接触的机器学习算法 都是被设计为解决某一个某一类问题的确定性算法 对于这些机器学习算法来说 唯一的灵活性体现在参数搜索空间上 向算法输入样本 算法借助不
  • i2c-core module could not be probed怎么解决啊

    求大佬帮忙看看 root PandoraBox A983 lib modules 3 14 79 uname a Linux PandoraBox A983 3 14 79 0 SMP Sat Sep 7 12 52 27 2019 arm
  • postman GET请求传Java实体,实体中又有对象实体数组

    controller代码接收参数如下 GetMapping getList ApiOperation 获取列表 public Object getList SearchListParam searchListParam return nul
  • 使用 Docker 运行简单的 python 程序

    以下是一个简单的 python 程序 用户输入一个最小值和最大值 输出二者之间的随机数 from random import randint min number int input Please enter the min number
  • 利用chatgpt实现三分钟快速制作自定义PPT

    目录 利用ChatGPT MindShow三分钟生成PPT 机器人 道合顺 莓用ai 百晓生 aichat 结合提词器以达到更好地提问效果 更好地提问ChatGPT 常用prompt表 小黄同学LL的博客 CSDN博客 举个栗子 利用Cha
  • 现代循环神经网络-门控循环单元(GRU)

    理论 门控隐状态 门控循环单元与普通的循环神经网络之间的关键区别在于 前者支持隐状态的门控 这意味着模型有专门的机制来确定应该何时更新隐状态 以及应该何时重置隐状态 这些机制是可学习的 并且能够解决了上面列出的问题 例如 如果第一个词元非常
  • stream().sorted 排序

    想用stream sorted 做双字段排序 list stream sorted Comparator comparing outObject gt outObject getinnerObject getAttribute revers
  • 责任链模式在项目中的引入使用

    责任链模式是一种设计模式 在责任链模式里 很多对象由每一个对象对其下家的引用而连接起来形成一条链 请求在这个链上传递 直到链上的某一个对象决定处理此请求 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求 这使得系统可以在不影响客
  • mybatisPlus 枚举类注解 @EnumValue @JsonValue

    1 概要说明 创建枚举类 在需要存储数据库的属性上添加 EnumValue注解 在需要前端展示的属性上添加 JsonValue注解 2 示例实践 public enum SexEnum MAN 1 男 WOMAN 2 女 EnumValue
  • 使用FormData对象

    使用FormData对象 TABLE OF CONTENTS 创建一个FormData对象 使用HTML表单来初始化一个FormData对象 使用FormData对象发送文件 TAGS 文件 利用FormData对象 你可以使用一系列的键值