jquery - ajax 使用包含数据和文件的 FormData 提交表单
问题描述
我试图提交一个包含数据和文件的表单
$('form').submit(function(event) {
var formData = $('form').serializeArray();
formData.push({
name: "logo",
value: $("#wizard-picture")[0].files[0]
});
formData.push({
name: "prologo",
value: $("#wizard-picturep")[0].files[0]
});
for (var i = 0; i < list.length; i++) {
formData.push({
name: "Keys",
value: list[i]
});
}
console.log(formData);
$.ajax({
url: '/Company/Steps/',
method: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data) {
debugger;
alert("succses");
},
error: function(xhr, ajaxOptions, thrownError) {
debugger;
console.log(xhr);
console.log(ajaxOptions);
console.log(thrownError);
alert(xhr.status);
alert(thrownError);
}
});
});
formData 在控制台中正确显示了所有数据。但在我的控制器上它是空的!
解决方案
要在请求中发送文件数据,您需要使用FormData
对象,而不是序列化数组。
因此,您可以向form
的构造函数提供对元素的引用FormData
,如下所示:
$('form').submit(function(e) {
e.preventDefault();
var formData = new FormData($('form').get());
$.ajax({
url: '/Company/Steps/',
method: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data) {
debugger;
alert("succses");
},
error: function(xhr, ajaxOptions, thrownError) {
debugger;
console.log(xhr);
console.log(ajaxOptions);
console.log(thrownError);
}
});
});
推荐阅读
- powershell - Powershell Get-WebsiteState 使用变量作为名称输入
- javascript - 单击按钮时弹出 MailChimp 错误
- android - 如何在 android 的服务中获取 runnig 应用程序包名称?
- kubernetes - 在 Helm 图表中添加 Nginx-Ingress/Certmanager 作为依赖项
- python - 在Python中递归转换dict叶子
- android - 如何从谷歌地图应用程序中的标记片段中获取数据?
- javascript - 在 Javascript (ES6) 中不使用 Switch 调用新构造函数类的更好方法
- r - 如何使用 keras 构建具有单个隐藏层的神经网络?
- python - 在python中使用numpy对100x100数组进行排序
- html - 渲染 div 中的按钮列