首先,因为使用的是 formdata,所以必须在传入 $.ajax 的参数中配置 processdata: false。
否则将会抛出 illegal invocation 的异常,因为 jquery 默认是会对传入的 data 字段的数据进行处理的。
官方文档是这么解释的:
其次,注意请求的 content-type 首部,默认是 application/x-www-form-urlencoded; charset=utf-8,也就是我们通常见的 “a=a&b=b” 这种格式。但使用 formdata 时,就不行了。
对参数添加 contenttype 字段,将其值设置为 false 即可。如果 jquery 版本小于 1.6,则手动设置为 multipart/form-data。具体说明请见文档说明:
我以前通常都是使用原生的 xmlhttprequest,所以倒也没有遇到过这种问题。既然遇到了,就得解决。因此记录下来,以备日后查找。
