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

标签 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");
  }
});

但是我收到内部服务器错误:500 并且未调用后端 API。

请帮助我在同一个 AJAX 请求中发送一个文件和一个数组 obj。提前致谢

最佳答案

您无法序列化在请求中发送的任何二进制数据。

要使用 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]);

关于jquery - 使用 jquery ajax 在同一个 POST 请求中上传文件和 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45594504/

相关文章:

javascript - 简单的 JQuery 滑动效果不同步

javascript - 当通过 github.io 部署时,jQuery 在 Codeacademy 上可以运行,但在 Firefox 中则不行

javascript - 根据页面加载值隐藏和显示 div

post - Wildfly 10 忽略的最大帖子大小

json - 如何在 Grails 中实现输入 JSON 验证?

javascript - jQuery 克隆表行(数据)

javascript - Rails,JSON api 返回商品列表的价格

javascript - 如何从AJAX上传文件到asp.net core Controller

javascript 里面的 php 和里面的 javascript php 代码

post - nginx 重写 POST 请求