ajax无法文件上传

本文介绍了在使用Ajax进行文件上传时遇到的问题及解决方案。错误主要包括:使用`serialize()`而非`FormData()`,以及缺少`processData: false`和`contentType: false`配置。通过创建新的FormData对象并使用append方法添加文件,以及设置适当的ajax参数,可以成功实现文件上传。同时,还提到了`cache`属性在文件上传中的作用。

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

ajax无法文件上传

原文链接:ajax无法文件上传

我是这样写的,ajax无法上传

var formData = $("#myForm").serialize();
$.ajax({
	url: "/home/index_mail.html",
	data: formData,
	type: "post",
	success: function (data) {
		if (data.code == 200) {
			//成功处理。。。
		}
	},
	error: function(request) {
		//失败处理。。。
	},
})

研究一番后,我发现我有两地方出错了。

错误一

需要使用new FormData();//创建一个新的FormData对象。而不能使用serialize()
正确书写:

var formData = new FormData($('#myForm')[0]);

或者

var formData = new FormData();
formData.append('name','value'); //使用append的方法为 formdata 对象赋值
错误二

ajax还需要两个配置

processData: false,
contentType: false,
//补充一点
cache: true,
1、processData:处理数据

默认情况下,processData 的值是 true,其代表以对象的形式上传的数据都会被转换为字符串的形式上传。而当上传文件的时候,则不需要把其转换为字符串,因此要改成false

2、contentType:发送数据的格式

和 contentType 有个类似的属性是 dataType , 代表的是期望从后端收到的数据的格式,一般会有 json 、text……等
而 contentType 则是与 dataType 相对应的,其代表的是 前端发送数据的格式

默认值:application/x-www-form-urlencoded
代表的是 ajax 的 data 是以字符串的形式 如 id=2019&password=123456
使用这种传数据的格式,无法传输复杂的数据,比如多维数组、文件等

有时候要注意,自己所传输的数据格式和ajax的contentType格式是否一致,如果不一致就要想办法对数据进行转换
把contentType 改成 false 就会改掉之前默认的数据格式,在上传文件时就不会报错了。

3、cache:缓存

当发起一次请求后,会把获得的结果以缓存的形式进行存储,当再次发起请求时,如果 cache 的值是 true ,那么会直接从缓存中读取,而不是再次发起一个请求了。
从 cache 的工作原理可以得出,cache 的作用一般只在 get 请求中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值