formdata,formdataappend怎么用

http://www.itjxue.com  2023-01-24 08:50  来源:未知  点击次数: 

表单提交FormData方法详解

FormData的主要用途有两个:

1、将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率。

2、异步上传文件

注意:需要设置Content-Type

eg:Vuejs结合axios时设置:

let config= headers: {'Content-Type': 'application/x-www-form-urlencoded'}

axios.post('/path', {params:.. },config).then(...).catch(...)

一、创建formData对象

1、创建一个空对象:

2、通过表单对formData进行初始化

创建表单:

通过表单元素作为参数,实现对formData的初始化:

二、操作方法

1、通过get(key)与getAll(key)来获取相对应的值

2、通过append(key,value)在数据末尾追加数据

3、通过set(key, value)来设置修改数据

4、通过has(key)来判断是否存在对应的key值

5、通过delete(key)可以删除数据

三、通过XMLHttpRequest发送数据

创建表单:

发送数据:

原文链接:

FormData (form 表单数据提交 处理 生成文件接口url的方式)

场景:比如现在有导出csv的url, 要求方式为get/post,后端是要求数据是form表单数据form-data的形式。

处理:

? ? 1 ,直接用form表单提交

? ? ? ? ? ? ? ? 设置好action,method即可,设置form提交content-type是multipart/form-data,如果不设置?enctype?属性,那么最终就会以 application/x-www-form-urlencoded 的默认方式提交数据。

? ? 2 , xmlHttpRequest方式处理(使用ajax)

? ? ? ? ? ? 需要数据处理为 FormData 形式即可( )

? ? ? ? ? ? 以vue的项目为例,下文的someData为举例

? ? ? ? ? ?//生成formData类型数据

? ? ? ? ? ? const formDataTrans = new FormData();

? ??????????formDataTrans.append("name", someData.name);

? ??????????formDataTrans.append("age", someData.age);

? ??????????formDataTrans.append("sex", someData.targetDesc);

??( 如果传递参数为formData形式,浏览器会忽略或者删除自定的Content-type,并添加Content-type:"multipart/form-data" )

? ? ? ? ? ? ?ajax({

????????????????url: "后端定义的接口,

????????????????method:‘post',

? ? ? ? ? ? ? ? headers:{

? ? ? ? ? ? ? ? ? ? ? ? "Content-type": "multipart/form-data"

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? data: formDataTransfer

????????????})

FormData ?接口提供了一种表示表单数据的键值对的构造方式,经过它的数据可以使用? XMLHttpRequest.send() ?方法送出,本接口和此方法都相当简单直接。如果送出时的编码类型被设为?"multipart/form-data",它会使用和表单一样的格式。

FormData对象

1.模拟HTML表单,相当于将HTML表单映射成表单对象,自动将表单对象中的数据拼接成请求参数的格式

2.异步上传二进制文件

1.准备HTML表单,表单中需要提交数据的表单控件必须添加name属性

2.将HTML表单转化为FormData对象,通过

3.提交表单对象

具体操作

①获取到提交表单的按钮并且给按钮添加点击事件,一旦点击就发送请求

②生成formData实例,将获取到的表单元素作为参数

③创建Ajax对象

④配置请求的方式以及地址

⑤将表单实例作为请求参数发送出去

⑥监听onload事件,当响应状态码为200时,说明请求成功,将结果打印出来即可

①formData. get ( 'key' )------用来获取表单对象的属性值,也就是输入框输入的值,key是表单的name所对应的名字

②formData. set ( 'key' ,'value')------用来设置表单对象属性的值,如果设置的表单属性存在就会覆盖原有的值,如果不存在就会创建这个属性

③formData. delete ( 'key' )-------删除表单对象的属性值

④formData. append ( 'key' ,'value')------向表单对象中添加值,如果属性已存在,那么会保留新旧两个属性及值,但是打印的话,后面添加的会覆盖前面的

①upload事件在上传文件的过程中持续触发,它又有一个onprogress方法

②已经上传的文件大小/文件的总大小*100+'%'-------- loaded (已经上传的文件大小)/ total (文件总大小)*100+'%'

③设置一个变量用来接收进度条的值,之后将值赋值给HYML样式即可

formdata和json传递的效率

formdata和json传递的效率相比json传递的效率高。需要传文件采使用formdata,其余情况一律用json。json是解决不同系统数据格式不统一的问题,最初是用xml,格式解析代价太大,不如json传递的效率高。

Formdata 的用法

FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利。

var formData = new FormData();

使用append()来添加数据

formData.append("file","target”);

formData里面存储的数据形式,一对key/value组成一条数据,key是唯一的,一个key可能对应多个value。如果是使用表单初始化,每一个表单字段对应一条数据,它们的HTML name属性即为key值,它们value属性对应value值。

我们可以通过get(key)/getAll(key)来获取对应的value,

添加数据 :

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

设置修改数据 :

我们可以通过set(key, value)来设置修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值。

判断是否该数据 :

我们可以通过has(key)来判断是否对应的key值

删除数据 :

通过delete(key),来删除数据

遍历

我们可以通过entries()来获取一个迭代器,然后遍历所有的数据,

前端向后端传formData格式的数据时,一般用post方式,因为post可以传的数据量比较大,速度快。

Request Payload 请求头部的 Content-Type: application/json,请求正文是一个 json 格式的字符串

Form Data 请求头部的 Content-Type: application/x-www-form-urlencoded

因为application/x-www-form-urlencoded传输的数据太小了 不适合传输文件 后来升级为multipart/form-data

前端小技巧:学会用FormData对象收集表单数据

我们先看一个小例子:

html代码:

需求:是获取form表单中的用户名和密码并包装成一个对象

这个需求是我们大部分时候在发送ajax请求时需要做的一个工作。

传统JS写法:

看一下效果:

可以看到,我们已经实现了需求,但是我们写的JS代码很繁琐,我们需要先获取form表单中input框元素,然后元素的value值,最后包装成一个对象。

FormData的JS写法:

效果如下:

通过这个例子你应该能感受到FormData的便利性,只需要 new FormData(form) 一句代码就可以把form表单内的所有信息都以键值对的形式包装成一个对象返回。

FormData对象是用来将form表单数据编译成键值对,这么做有两个好处:

FormData的常用操作方法:

FormData对象可以帮我们更方便的收集表单数据并中的整理成对象,大大方便了我们发送ajax请求。

(责任编辑:IT教学网)

更多

推荐Flash教程文章