位置: IT常识 - 正文

FormData详解(formdata方法)

编辑:rootadmin
FormData详解

推荐整理分享FormData详解(formdata方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:formdata用法详解,formdata用法,formdataparam,formdata方法,form-data,formdata.append(),formdata enctype,formdata方法,内容如对您有帮助,希望把文章链接给更多的朋友!

FormData 接口提供了一种表示表单数据的键值对 key/value 的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send() 方法发送出去,本接口和此方法都相当简单直接。如果表单 enctype 属性设为 multipart/form-data ,则会使用表单的 submit() 方法来发送数据,从而发送数据具有同样形式。

构造函数

FormData()构造函数用于创建一个新的FormData对象。

var formData = new FormData(form)

form可选

一个HTML 上的``表单元素——当指定了,这种方式创建的FormData对象会自动将form中的表单值也包含进去,包括文件内容也会被编码之后包含进去。

例子

下面的代码将创建一个空的FormData对象:

var formData = new FormData(); // 当前为空// 你可以使用FormData.append来添加键/值对到表单里面;formData.append('username', 'yang');

或者你可以使用可选的form参数来创建一个带预置数据的FormData对象:

<form id="myForm" name="myForm"> <div> <label for="username">Enter name:</label> <input type="text" id="username" name="username"> </div> <div> <label for="useracc">Enter account number:</label> <input type="text" id="useracc" name="useracc"> </div> <div> <label for="userfile">Upload file:</label> <input type="file" id="userfile" name="userfile"> </div><input type="submit" value="Submit!"></form>

注意: 所有的输入元素都需要有name属性,否则无法访问到值。

vr formData = new FormData($("#myForm")[0]);var name = formData.get("username"); // 获取名字var psw = formData.get("useracc"); // 获取账户// 当然也可以在此基础上,添加其他数据formData.append("token","kshdfiwi3rh");APIFormData.append()

通过append(key,value)来添加数据,如果指定的key不存在则会新增一条数据,如果key存在,则追加到数据末尾

FormData.set和 append() 的区别在于,如果指定的键已经存在, FormData.set 会使用新值覆盖已有的值,而 append() 会把新值添加到已有值集合的后面。

这个方法有两个版本:一个有两个参数的版本和一个有三个参数的版本。

// 语法// name: value中包含的数据对应的表单名称// value: 表单的值。可以是USVString 或 Blob (包括子类型,如 File)。//filename (可选): 传给服务器的文件名称 (一个 USVString), 当一个 Blob 或 File 被作为第二个参数的时候, Blob 对象的默认文件名是 "blob"。 File 对象的默认文件名是该文件的名称。formData.append(name, value);formData.append(name, value, filename);// 示例var formData = new FormData(); // Currently empty// 你可以通过 FormData.append 往对象里加入键值对:formData.append('username', 'Chris');formData.append('userpic', myFileInput.files[0], 'chris.jpg');// 跟常规表单数据一样,你可以使用同一个名称添加多个值 。例如 (为了与PHP命名习惯一致在名称中添加了[]):formData.append('userpic[]', myFileInput1.files[0], 'chris1.jpg');formData.append('userpic[]', myFileInput2.files[0], 'chris2.jpg');formData.getAll("userpic[]"); // [myFileInput1.files[0], myFileInput2.files[0]]

这项技术使得多文件上传的处理更加简单,因为所得数据结构更有利于循环。

FormData.get/getAll()FormData详解(formdata方法)

get()方法用于返回FormData对象中和指定的键关联的第一个值,如果你想要返回和指定键关联的全部值,那么可以使用getAll()方法。

getAll()方法会返回该 FormData 对象指定 key 的所有值。

// 语法// name: 将要获取值的键名// 返回值: 包含值的FormDataEntryValue (en-US)。formData.get(name);// 例子var formData = new FormData();// 使用FormData.append方法添加两个数据:formData.append('username', 'Chris');formData.append('username', 'Bob');// 获取key为name的第一个值formData.get('username'); // "Chris"// 返回一个数组,获取key为name的所有值formData.getAll("username"); // ["Chris",'Bob']FormData.delete()

delete() 方法会从 FormData 对象中删除指定键,即 key,和它对应的值,即 value

// 语法// name: 要删除的键(Key)的名字formData.delete(name);// 例子var formData = new FormData(myForm);formData.delete('username');FormData.set()

给 FormData 设置属性值,如果FormData 对应的属性值存在则覆盖原值,否则新增一项属性值。

// 语法// name: 字段名称// value:字段的值,如果是传入两个参数的方式,那么该值是一个 USVString,如果不是,将被转成一个字符串。如果是传入三个参数的方式,那么该值将是一个布尔值(Blob),文件(File),或者一个 USVString,如果不是,将被转成一个字符串。// filename(可选): 当第二个参数传递的是一个blob对象(Blob)或者file对象(File),filename参数就代表传给服务端的文件名(一个USVString)。Blob 对象的默认文件名是 "blob"。// 该方法有两种使用方式,一个是传入两个参数,一个是传入三个参数。formData.set(name, value);formData.set(name, value, filename);// 示例var formData = new FormData(); // Currently emptyformData.set('username', 'Chris');formData.set('userpic', myFileInput.files[0], 'chris.jpg');FormData.has()

has()方法会返回一个布尔值,表示该FormData对象是否含有某个key

// 语法formData.has(name);// 示例var formData = new FormData();formData.has('username'); // falseformData.append('username', 'Chris');formData.has('username'); // trueFormData.entries()

FormData.entries() 方法返回一个 iterator对象 ,此对象可以遍历访问FormData中的键值对。其中键值对的key是一个 USVString 对象;value是一个 USVString , 或者 Blob对象。

// 语法formData.entries();// 示例// Create a test FormData objectvar formData = new FormData();formData.append('key1', 'value1');formData.append('key2', 'value2');// 每调用一次next()返回一条数据,数据的顺序由添加的顺序决定// 返回的是一个对象,当其done属性为true时,说明已经遍历完所有的数据,这个也可以作为判断的依据// 返回的对象的value属性以数组形式存储了一对key/value,数组下标0为key,下标1为value,如果一个key值对应多个value,会变成多对key/value返回var i = formData.entries();i.next(); // {done:false, value:["key1", "value1"]}i.next(); // {done:fase, value:["key2", "value2"]}i.next(); // {done:true, value:undefined}// 方式二for(var pair of formData.entries()) { console.log(pair[0]+ ', '+ pair[1]);}key1, value1key2, value2FormData.keys()

FormData.keys() 该方法返回一个迭代器(iterator),遍历了该 formData 包含的所有key ,这些 key 是 USVString 对象。

// 语法// 返回值:返回一个迭代器( iterator)formData.keys();// 示例// 先创建一个 FormData 对象var formData = new FormData();formData.append('key1', 'value1');formData.append('key2', 'value2');// 输出所有的 keyfor (var key of formData.keys()) { console.log(key);}key1key2FormData.values()

FormData.values() 方法返回一个允许遍历该对象中所有值的 迭代器 。这些值是 USVString 或是Blob 对象。

// 语法// 返回值:返回一个迭代器formData.values();// 示例//创建一个FormData测试对象var formData = new FormData();formData.append('key1', 'value1');formData.append('key2', 'value2');//显示值for (var value of formData.values()) { console.log(value);}value1value2FormData 实践

FormData 对象的使用:

用一些键值对来模拟一系列表单控件:把 form 中所有表单元素的 name 与 value 组装成一个 queryString;

异步上传二进制文件;

FormData 对象的操作方法,全部在原型中本身没任何的属性及方法

使用 FormData 对象发送文件

<!--HTML部分--><form action=""><label for="">姓名: <input type="text" name="name"></label><label for="">文件:<input id="file" type="file" name="file"> </label> <label for=""><input type="button" value="保存"></label></form>

 原生ajax

//原生js上传文件//获取按钮var btn = document.querySelector('[type=button]');//绑定事件btn.onclick = function () { // 文件元素 var file = document.querySelector('[type=file]'); // 通过FormData将文件转成二进制数据 var formData = new FormData(); // 将文件转二进制 formData.append('upload', file.files[0]);//创建XMLHttpRequest,用这个来发送数据 var xhr = new XMLHttpRequest; /*初始化HTTP请求参数(请求方式,url,是否同步)*/ xhr.open('post', 'file.php');/*xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");设置请求头的contentType*/ // 监听上传进度 xhr.upload.onprogress = function (ev) { // 事件对象 // console.log(ev); var percent = (ev.loaded / ev.total) * 100 + '%'; console.log(percent); progress.style.width = percent; } xhr.send(formData); xhr.onreadystatechange = function () { //status状态为200 表示请求成功,readystate为4表示对象传递完毕或者准备就绪 if(xhr.readyState == 4 && xhr.status == 200) { } }}

使用 jQuery

//绑定提交事件function upload() { //获取form表单元素 var f = document.getElementById("myForm"); //使用表单元素来构造FromData var myform = new FormData(f); $.ajax({ url: "/Library/test/upload", type: "post", dataType: "json", data: myform, cache: false, // 不缓存 processData: false, // jQuery不要去处理发送的数据 contentType: false, // jQuery不要去设置Content-Type请求头 success: function (data) { console.log(data); } });}
本文链接地址:https://www.jiuchutong.com/zhishi/299154.html 转载请保留说明!

上一篇:yolov5_reid【附代码,行人重识别,可做跨视频人员检测】(yolov5 libtorch)

下一篇:【JavaScript】手撕前端面试题:手写Object.create | 手写Function.call | 手写Function.bind(javascript中文手册)

  • 美团还款在哪里找(美团还款在哪里分期)

    美团还款在哪里找(美团还款在哪里分期)

  • word怎么设置a4纸(word怎么设置a4纸页边距)

    word怎么设置a4纸(word怎么设置a4纸页边距)

  • 快手自己看自己的作品增加播放量么(快手自己看自己的作品算浏览吗)

    快手自己看自己的作品增加播放量么(快手自己看自己的作品算浏览吗)

  • 手机后壳翘起的危害(手机后壳翘起的图片)

    手机后壳翘起的危害(手机后壳翘起的图片)

  • 华为摄像头玻璃碎了怎么办(华为摄像头玻璃碎了修理多少钱)

    华为摄像头玻璃碎了怎么办(华为摄像头玻璃碎了修理多少钱)

  • 萤石云可以同时登录几个手机(萤石云能连接几部手机)

    萤石云可以同时登录几个手机(萤石云能连接几部手机)

  • 微信换头像后对方多久显示(微信换头像后对方不点头像也能看见换头像了吗)

    微信换头像后对方多久显示(微信换头像后对方不点头像也能看见换头像了吗)

  • 苹果手机包装盒上有序列号吗(苹果手机包装盒序列号怎么看)

    苹果手机包装盒上有序列号吗(苹果手机包装盒序列号怎么看)

  • 装宽带和装wifi是一样的吗(装宽带和装wifi和网络电视有什么区别)

    装宽带和装wifi是一样的吗(装宽带和装wifi和网络电视有什么区别)

  • 重启电脑一直显示正在准备windows(重启电脑一直显示正在重新启动怎么办)

    重启电脑一直显示正在准备windows(重启电脑一直显示正在重新启动怎么办)

  • 3300x配什么主板(3300X配什么主板)

    3300x配什么主板(3300X配什么主板)

  • oppo手机没有超级截屏吗(oppo手机没有超级截屏吗怎么弄)

    oppo手机没有超级截屏吗(oppo手机没有超级截屏吗怎么弄)

  • 华为9plus可以投屏吗(华为9plus投屏)

    华为9plus可以投屏吗(华为9plus投屏)

  • 微博怎么设置密码(微博怎么设置密码锁屏)

    微博怎么设置密码(微博怎么设置密码锁屏)

  • 显示器显示no signal是什么 (显示器显示no signal 但是有声音)

    显示器显示no signal是什么 (显示器显示no signal 但是有声音)

  • word怎么输入下角标(word怎么输入下标字母)

    word怎么输入下角标(word怎么输入下标字母)

  • realme x2怎么关闭拨号按键音(realmex2怎么关闭震动)

    realme x2怎么关闭拨号按键音(realmex2怎么关闭震动)

  • 苹果11微信视频可以美颜吗(苹果11微信视频怎么开美颜)

    苹果11微信视频可以美颜吗(苹果11微信视频怎么开美颜)

  • 手机6个g和8个g区别(手机八g和六g有什么区别)

    手机6个g和8个g区别(手机八g和六g有什么区别)

  • 电脑第一次充电要充满吗(笔记本电脑第一次充电)

    电脑第一次充电要充满吗(笔记本电脑第一次充电)

  • 不开黄钻怎么看被挡访客(不开黄钻怎么看隐身访客)

    不开黄钻怎么看被挡访客(不开黄钻怎么看隐身访客)

  • ipad怎么连接airpods(ipad怎么连接airpords)

    ipad怎么连接airpods(ipad怎么连接airpords)

  • 云闪付app怎么刷公交(云闪付app怎么刷京东白条)

    云闪付app怎么刷公交(云闪付app怎么刷京东白条)

  • i78550u和i78565u对比(i78550u和i58550u对比)

    i78550u和i78565u对比(i78550u和i58550u对比)

  • 实况模式怎么打开(实况模式拍照技巧)

    实况模式怎么打开(实况模式拍照技巧)

  • 微信转账的名字怎么取消(微信转账的名字是银行卡还是手机号)

    微信转账的名字怎么取消(微信转账的名字是银行卡还是手机号)

  • win10自动修复死循环(win10自动修复不成功一直重启)

    win10自动修复死循环(win10自动修复不成功一直重启)

  • iphone倒数日怎么显示在桌面(iphone倒数日怎么正数)

    iphone倒数日怎么显示在桌面(iphone倒数日怎么正数)

  • 抖音上传失败什么原因(抖音上传老是失败)

    抖音上传失败什么原因(抖音上传老是失败)

  • wps自动备份

    wps自动备份

  • 〖大前端 - 基础入门三大核心之 html 篇⑩〗- 图片标签(大前端2021)

    〖大前端 - 基础入门三大核心之 html 篇⑩〗- 图片标签(大前端2021)

  • 个人哪些捐赠可以税前扣除
  • 买一赠一的税务处理
  • 纳税人离线开票时间的文件
  • 企业新成立,何种情况下需要开始记账报税
  • 促销费用计入销售费用哪个科目
  • 未完工工程如何做绩效评价
  • 企业入库流程图
  • 增值税一般纳税人资格登记表
  • 应收款项出售的分录怎么处理
  • 电子设备残值率的最新规定
  • 银行电子回单是原始凭证吗
  • 营改增之后对企业的影响
  • 公司向个人转款备注备用金合法吗
  • 收到存款利息属于现金流量表
  • 蓝字发票未入账收到红字发票处理?
  • 货样广告品出口需要开票吗
  • 支票付款提示
  • 公司发的奖金可以直接公司账户转账给员工吗?
  • 代收水电费如何开票商品分类编码
  • 设备租赁费发票
  • 给客户退差价怎么说
  • 施工单位临时设施的搭建费属于
  • 卖投资性房地产交税
  • 招待客户产生的住宿费
  • 基本户往一般户转账用途怎么写
  • 如何获取windows最高权限
  • 计提跌价准备会影响利润吗
  • 电费预提费用
  • 投资收益借贷方向增减
  • 阿拉斯加州zip
  • php表单系统源码
  • 台式机显示器推荐
  • 将自产的应税消费品对外捐赠
  • dll进程
  • 合并报表抵消分录未分配利润怎么算
  • php字符串转浮点型
  • 一般纳税人辅导期什么意思
  • vue获取设备id
  • Python如何将字符串转化为数字
  • 用现金报销差旅费及增值税怎么做账
  • 免税增值税纳税申报表怎么填
  • 三个数排序c语言程序从大到小
  • 公司内控制度由谁制定
  • 酒店营业税率是多少
  • 计提应收账款坏账准备属于谨慎性吗
  • 营业外支出增加记借方还是贷方
  • odbc api
  • 个税申报可以去税务局吗
  • 押金和租金
  • 稳岗返还的概念
  • 医院药品进销差价会计核算
  • 高新企业账目有什么不同
  • 房地产毛利额纳税调整
  • 坏账准备的计提方法有哪些
  • 网上购物没有发票
  • 养老院的账务处理会计实务问答
  • 请根据你的了解叙述c++的特点,c++对c有哪些发展
  • 如何优化sql语句执行效率
  • 一些有用的sql语句是什么
  • 微型创新是什么
  • pc版直通车
  • linux系统讲解
  • wintogo.exe
  • win7任务栏快捷启动如何设置
  • WINDOWS10系统怎样看主板
  • 关于模型视图变化的说法
  • jQuery+PHP实现可编辑表格字段内容并实时保存
  • 用linux搭建服务器
  • css中背景图片设置
  • unity 3d完全自学教程
  • 解决跨域的原理
  • js数组菜鸟教程
  • jQuery+PHP+MySQL实现无限级联下拉框效果
  • bootstrap 树形菜单
  • 外部js获取当前vue实例
  • 国家税务总局税务稽查科
  • 税务局监察室主任职位说明书
  • 如何查看自己公司的税种
  • 发票税务抽奖怎么操作
  • 贵州税务机关
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设