jQuery Ajax 请求报错“Illegal invocation”
问题描述
在使用 jQuery 封装的 ajax 请求发送图片等一系列文件时,使用 FormData
传入数据作为 data
的属性值,会出现这个错误。
报错原因
jQuery 封装的 ajax 里面的 Content-Type 属性默认为 true,它会设置请求头中 Content-Type= "application/x-www-form-urlencoded"
。而使用 FormData 传输数据时默认的 Content-Type 为 MultiPart/form-data
,二者相互矛盾,所以报错。
解决方法
很简单,只需要的 ajax 请求中加入两行代码:
1 | contentType: false, |
processData 是另外一个属性,规定通过请求发送的数据是否转换为查询字符串。默认为 true,表示通过 data 选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型"application/x-www-form-urlencoded"
。
我们并不希望它转换我们的数据为字符串,所以也要将它设置为 false。