FormData表单序列化

当使用ajax处理包含文件的表单时,不能单纯使用serialize。此时,FormData成为了解决问题的关键。FormData允许我们将表单数据,包括文件,序列化以便通过ajax提交。创建FormData对象,设置jQuery.ajax参数,如`cache: false`、`processData: false`和`contentType: false`,然后可以将表单对象或以键值对形式添加到formData中。提交时,将formData作为data参数即可。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们用ajax提交表单时,通常用的都是serialize对表单进行序列化。

但是有了文件标签type='file'时,用serialize进行序列化,就会有问题了

解决表单有文件时序列化的方法,就是用FormData

下面来说下FormData怎么用:

FormData用法

  1. 实例化了一个空的FormData对象,可以认为它就是一个form表单,但现在里面什么控件都没有。

    var formData = new FormData(); 
    
    1. 可直接放表单对象序列化,自动封装对象对象为DOM对象
    var formData = new FormData($("#subForm")[0]);
    
    1. 给实例化的formdata对象添加一个控件,注意这里添加的是表单已写有input标签的
    <input type="file" name="myfile">
    
    formData.append('myfile', $('input[name=myfile]')[0].files[0]);
    
    1. 没用表单时,以“键-值”对的形式给FormData添加控件,注意第3个参数“上传文件名”是可选的
    FormData.append(name, value, filename);
    
    1. 将实例化的formData作为jQuery.ajax()方法data参数的值传递进去,提交给后端服务器

    注意的是以下三个参数不可少

    cache: false,
    processData: false,
    contentType: false,
    

    cache设置为false,上传文件不需要缓存。

    processData参数,根据jQuery.ajax()文档中的解释,默认情况下,jQuery会处理发送的数据,将数据按照’application/x-www-form-urlencoded’的要求转换为查询字符串,如果要发送的数据是DOMDocument或者不需要处理,就可以设置为false不让jQuery转换数据,我们这里要发送的数据其实就是DOMDocument。

    contentType设置为false。因为是由form表单构造的FormData对象,且已经声明了属性***enctype=“mutipart/form-data”***,所以这里设置为false。


FormData代码例子

一、有表单

ajax用var formData = new FormData($("#subForm")[0]);

<form id= "Form" enctype="multipart/form-data">
		......
</form>
function ajaxSubmit(){
		var url = "提交路径";
		//有文件上传,所以使用FormData装载表单
		//serialize()不序列化上传的文件
		var formData = new FormData($("#Form")[0]);
		$.ajax({
			url : url,
			type: 'POST',
	        data: formData,
	        cache: false,
	        processData: false,
	        contentType: false,
	        success: function (data) {
	            alert(data);
	        }

二、没有表单
var oMyForm = new FormData();
    oMyForm.append("userName", "Groucho");
    oMyForm.append("accountnum", 123456); 
    oMyForm.append("file", $('#file')[0].files[0]);	

$.ajax({
    url: '提交路径',
    type: 'POST',
    data: oMyForm,
    cache: false,
    processData: false,
    contentType: false,
    success:function(data){
        alert(data);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值