1. FormData对象的作用:
① 模拟HTML表单,相当于将HTML表单映射成表单对象,自动将表单对象中的数据拼接成请求参数的格式
② 异步上传二进制文件
2. FormData对象的使用:
① 准备HTML表单
注意:
这个表单不需要请求方式和请求地址,这些内容可以在Ajax中设置。
formdata对象不能用于get请求,因为formdata的数据要放到send()方法中,而get请求方式的请求参数只能放在请求地址的后面。
表单中的input控件必须要有name属性,因为当我们把表单提交到服务器的时候,表单的name属性会作为请求参数的属性名字。
表单中的提交按钮不是submit,如果是submit的话,点击会有默认的提交行为。
表单对象的好处是,不需要我们单独的一个一个的去获取指定的表单控件的值。
② 将HTML表单转化为formData对象
var form = document.getElementById('form');var formData = new FormData(form);
③ 提交表单对象
xhr.send(formData);
注意:服务器端bodyParser模块(用来处理post请求)不能解析formData对象表单数据,我们需要使用formidable模块进行解析
//解析客户端传递过来的FormData对象
form.parse(req, (err, fields, files) =>{...})//第一个参数是错误对象,第二个参数保存的是表单中普通的请求参数,第三个参数保存的是和文件上传相关的信息
3. FormData对象的实例方法:
① 获取表单对象中属性的值
formData.get('key');
② 设置表单对象中属性的值
formData.set('key', 'value');
③ 删除表单对象中属性的值
删除属性的应用场景:输入两次密码(原密码和确认密码),但是提交给服务器的时候只用提交一份,所以需要删除掉确认密码。
formData.delete('key');
④ 向表单对象中追加属性值
formData.append('key', 'value');
注意:set方法与append方法的区别是,在属性名已存在的情况下,set会覆盖已有键名的值,append会保留两个值。
4. FormData二进制文件上传:
var file = document.getElementById('file')//当用户选择文件的时候
file.onchange = function() {//创建空表单对象
var formData = newFormData();//将用户选择的二进制文件追加到表单对象中
formData.append('attrName', this.files[0]);//配置ajax对象,请求方式必须为post
xhr.open('post', 'www.example.com');
xhr.send(formData);
}
注意:用户选择的文件中的files属性是文件集合,即使只有一个值也是集合,需要用files[0]的形式表示(一般每次都只是选择一个文件上传)
5. FormData文件上传进度展示:
0%