ASP.NET Core MVC中$.post()提交FormData失败能否替代$.ajax使用?
问题解答
可以使用$.post()替代$.ajax()实现FormData提交,之前调用失败是因为缺少了两个必要的配置项。
直接调用$.post('CreateProduct', formData)失败的原因:
- 默认
processData参数为true,jQuery会尝试把非字符串类型的请求数据序列化为查询字符串格式,而FormData对象无法被该序列化逻辑处理,会直接抛出类型错误。 - 默认
contentType参数为application/x-www-form-urlencoded; charset=UTF-8,但提交FormData时需要浏览器自动生成带边界值的multipart/form-data请求头,手动设置默认值会导致服务端无法正确解析数据。
可行的$.post()写法
从jQuery 1.9版本开始,$.post支持传入完整的配置对象,和$.ajax的配置规则完全通用,正确写法如下:
$.post({ url: 'CreateProduct', data: formData, processData: false, contentType: false });
上述写法和你使用的$.ajax写法效果完全一致,$.post本身就是预先设置了type: 'POST'的$.ajax语法糖,所有$.ajax支持的配置项都可以在$.post中使用。
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

