【问题标题】:JQuery.post() method in ASP.NET Core MVC [duplicate]ASP.NET Core MVC 中的 JQuery.post() 方法 [重复]
【发布时间】:2021-10-03 17:56:34
【问题描述】:

我正在使用 FormData 向我的服务器发送一些数据

submit.click(function (event) {
    event.preventDefault();
    let formData = new FormData();

    //filling data
}

然后我想用$.post()以这种方式将我的表单发送到服务器

$.post('CreateProduct', formData);

但它不起作用,我收到了这个异常

否则,当我使用 $.ajax 发布我的数据时,它可以完美运行

$.ajax({
    url: 'CreateProduct',
    data: formData,
    processData: false,
    contentType: false,
    type: 'POST'
});

是否有机会使用$.post 而不是$.ajax?我错过了什么吗??

【问题讨论】:

    标签: jquery asp.net-core-mvc


    【解决方案1】:

    看来你可能会遇到jQuery添加内容类型头,这会导致边界字符串丢失。

    您必须将 contentType 选项设置为 false 以强制 jQuery 不为您添加 Content-Type 标头,否则会丢失边界字符串。另外,你必须将 processData 标志设置为 false,否则,jQuery 会尝试将你的 FormData 转换为字符串,这会失败。

    并且我们在ajax中将contentType设置为false,以防止JQuery对其进行操作,从而丢失分隔符,导致服务器无法正常解析文件。

    就像你改变了一样:

    $.ajax({
        url: 'CreateProduct',
        data: formData,
        processData: false,
        contentType: false,
        type: 'POST'
    });
    

    【讨论】:

      【解决方案2】:

      我试着用这种方式改变它,它可以工作

      $.post({
          url: 'Submit',
          data: formData,
          processData: false,
          contentType: false
      });
      

      有什么建议可以改进吗?

      【讨论】:

      • 在调用 $.post 之前运行 $.ajaxSetup({processData: false})。您可以将代码简化为$.post('Submit', formData)
      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多