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
2
3
4
contentType: false,
// 告诉jQuery不要去设置Content-Type请求头
processData: false,
// 告诉jQuery不要去处理发送的数据

processData 是另外一个属性,规定通过请求发送的数据是否转换为查询字符串。默认为 true,表示通过 data 选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型"application/x-www-form-urlencoded"

我们并不希望它转换我们的数据为字符串,所以也要将它设置为 false。