使用FormData对象打包参数和上传文件

FormData对象

FormData是H5新增的一个HTML对象,可以用JS代码来传输 Content-type:multipart/form-data 的对象

初始化

通常有两种初始化方式
1
2
3
4
//新建一个空的Form对象
var form1 = new FormData();
//通过读取一个已经存在的Form标签来新建对象
var form2 = new FormData(document.getElementById("formId"));

添加变量

可以使用append/get方法来进行字段的添加和删除
1
2
3
4
//添加某个名为key的字段
form1.append("key","value");
//取出文件添加入file字段
form1.append("file",$('#file').files[0]);
注意files函数返回的是一个文件数组,注意取出对象

获得变量值

FormData对象内的参数是私有的,无法通过打点调用,需要通过get函数来读取,但是貌似Safari不支持,Chrome支持
1
2
3
4
//错误的方式
var key1 = form1.key
//正确的方式
var key2 = form1.get("key")

发送Ajax

在发送Ajax的时候,由于FormData本身已经设定了Content-type所以JQuery的Ajax需要设定一些参数
1
2
3
4
5
6
7
8
 $.ajax("url",
      {
        type: 'POST',
        data: form1,
        processData: false, //不对数据进行处理
        contentType: false  //不对Content-type进行处理
      }
).done(function(res) { }).fail(function(res) {});

后台的处理

出了要发送订制过的Ajax之外,也需要在后台开启multipart/form-data的数据绑定和接收,以Java为例,参考HTTP的参数绑定

评论

此博客中的热门博文

Windows7系统目录迁移:Users,Program Files,ProgramData

百度网盘资源搜索网站大全

ELK实时分析之php的laravel项目日志

阿里图床源码(图片上传)

Windows 操作系统微软官方镜像

也谈SpringCloud:假如 《复仇者联盟4》是一个微服务

数据库逻辑设计之三大范式通俗理解

小成本启动跨境电商教程

kubernetes的Headless Services