我正在尝试使用jQuery Ajax发送POST请求,我想在其中上传文件和一些json数据。请找代码,
var logoImg = $('input[name="logoImg"]').get(0).files[0];
var formData = new FormData();
formData.append('logo', logoImg);
var objArr = [];
objArr.push({
"id": id,
"name": userName
});
var obj = [{
"objArr": objArr,
"formData": formData
}];
$.ajax({
type: "POST",
url: url,
dataType: "json",
data: JSON.stringify(obj),
contentType: "application/json",
cache: false,
async: false,
complete: function(data) {
alert("success");
}
});
但是我得到Internal server error: 500
并且没有调用后端API。
请帮我在同一个AJAX请求中发送文件和数组obj。提前致谢
答案 0 :(得分:5)
您无法序列化您在请求中发送的任何二进制数据。
要使用FormData
对象发送其他信息,只需使用append()
方法添加它,类似于您对图片本身的处理方式:
var logoImg = $('input[name="logoImg"]').get(0).files[0];
var formData = new FormData();
formData.append('logo', logoImg);
formData.append('id', id);
formData.append('name', userName);
$.ajax({
type: "POST",
url: url,
data: formData,
contentType: false,
processData: false,
cache: false,
complete: function(data) {
alert("success");
}
});
请注意,选项中的重要部分是将contentType
和processData
设置为false
,然后删除async: false
,以便异步发生请求。
最后请注意,如果您要在请求中发送的输入都包含在同一表单中,您可以使用FormData
构造函数将代码简化为:
var formData = new FormData($('#yourForm')[0]);