表单提交工作,但 ajax 的 CORS 问题

Posted

技术标签:

【中文标题】表单提交工作,但 ajax 的 CORS 问题【英文标题】:Form submission working, but CORS issue with ajax 【发布时间】:2017-09-03 10:06:53 【问题描述】:

我有一个表单,其中包含对处理帖子的站点的操作。当我在操作中使用 url 点击提交时,它可以工作。问题是,当表单提交或出现错误时,它会将我带到另一个页面,因此显示“成功”或“错误”(我不希望它带我到另一个页面,只需将响应返回到我的页面,这样我就可以制作模式或其他东西)。我尝试了许多不同的方法,但是当我使用 AJAX 时,我得到了“Access-Control-Allow-Origin”。如果我已经被允许在没有它的情况下发帖,我为什么会得到这个?

当表单标题为:

form accept-charset="UTF-8" class="" id="contestForm" enctype="multipart/form-data" action='url' method='post'>

我提出的请求示例。

$.ajax(
  method: 'POST',
  url: url,
  dataType: 'json' or 'jsonp',
  headers: 'Access-Control-Allow-Origin: *,
);

等等,等等(抱歉,这可能不完整,因为我在提问之前已经重新开始了)。知道如何在点击提交按钮后不进入提交页面吗?

附:我使用 Flockler 进行提交,我无法控制如何将数据发布到他们的服务器。

【问题讨论】:

您发布的服务器也需要针对 CORS 请求进行配置 我在看那个,我会再检查一次。谢谢你。我们以前没有使用过,对这种类型的表单提交仍然是新手 是的,您似乎从错误的一端得到它。您发布的服务器必须授权您这样做,您不能伪造自己的请求来允许您这样做,这将完全违背安全目的。 @b.enoit.be 可以理解。谢谢 【参考方案1】:

请在服务器中添加CORS header ‘Access-Control-Allow-Origin:<requster_domain>’ 以接受您的请求。通过 Ajax,它打开了一个安全威胁,因此浏览器阻止了它,这是有道理的。否则任何人都可以打开浏览器控制台并可能用 ajax 调用轰炸服务器。但是,如果您的服务器信任来自您的域的调用,那么安全风险就会得到缓解。

我希望这会有所帮助。

【讨论】:

以上是关于表单提交工作,但 ajax 的 CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

设置ajax表单提交延迟

提交常规表单之前的 AJAX 请求

通过 Ajax 提交表单 - FormData 始终为空 [重复]

表单验证在使用 ajax 方法提交之前不起作用

Django Ajax 表单工作但抛出 500(内部服务器错误)

jQuery AJAX 将提交的表单替换为表单(好),但不会再次提交