这篇文章是在提交HTML非表单时模拟表单数据,就是简单的封装普通的对象数据,使其成为想要的form-data数据向后台发起请求.首先需要了解FormData和Content-Type:multipart/form-dataFrmData类型其实是在XMLHttpRequestlevel2定义的,方便表格的序列化和创建与form相同格式的数据(的当然,对于XHR传输)。form-data:是http请求中的multipart/form-data,将表单的数据处理成一条消息,以标签为单位,用分隔符分隔。键值对和文件都可以上传。当上传的字段是文件时,会有一个Content-Type表示文件类型;由于边界隔离,multipart/form-data既可以上传文件,也可以上传键值对,采用键值对的方式,所以可以上传多个文件。构造函数创建一个formData对象实例。有几种创建空对象实例的方法varform=newformData();这时可以调用append(key,value)方法向表单实例中添加数据。首先我们要明确formData存储的数据格式,一对key/value组成一条数据,key是唯一的,一个key可能对应多个value。如果使用表单初始化,每个表单字段对应一条数据,它们的htmlname属性是key值,它们的value属性对应value值。如果指定的key不存在,则添加一条新的数据。如果键存在,它将被添加到数据的末尾。我以第一步实例化的表单为例:form.append('checked','A')form.append('checked','B')form.append('userName','Susan')//此时的形式键值对应该是://checked:['A','B']//userName:'Susan'这里我把需要传给后台的数据封装在一个名为objToFormData。代码如下:/***objToFormData*@param{Object}*@returns{formData}*将接口参数转换为formData格式*/exportconstobjToFormData=(obj)=>{letdata=newFormData()for(letiinobj){data.append(i,obj[i])}returndata}如上封装,每次调用接口时,只需要在传参时调用objToFormData()方法即可:2.另外,也可以使用已有的表单初始化对象实例//获取页面已有的表单formvarform=document.getElementById("myForm");//使用表单初始化varformData=newFormData(form);//我们可以根据名称访问表单中的字段varname=formData.get("name");//获取名称varpsw=formData.get("psw");//获取密码//当然也可以在这里的基础上,添加其他数据formData.append("token","kshdfiwi3rh");formData的操作方法1.获取formData中的key/value值:get()/getAll()从图上的代码不难看出,get()方法获取的是value的第一个值,而getAll()方法获取一个数组,不管key对应的值的数据类型(比较getAll('name')和getAll('age'))2.修改formDataset()中某个key的值同样,set()方法重置值,也可以修改数据类型。3、删除formData中的key/value值:delete()4、formData的其他方法,上面四种常用。可以使用其他方法进行判断或者遍历等,根据业务场景而定。
