使用jquery ajax在同一个POST请求中上传文件和JSON数据?

时间:2017-08-09 15:11:43

标签: jquery ajax post upload

我正在尝试使用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。提前致谢

1 个答案:

答案 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");
  }
});

请注意,选项中的重要部分是将contentTypeprocessData设置为false,然后删除async: false,以便异步发生请求。

最后请注意,如果您要在请求中发送的输入都包含在同一表单中,您可以使用FormData构造函数将代码简化为:

var formData = new FormData($('#yourForm')[0]);