【问题标题】:How to make JQuery AJAX not follow the redirect after the successful form submission?表单提交成功后如何让JQuery AJAX不跟随重定向?
【发布时间】:2018-10-05 00:46:08
【问题描述】:

无法加载 http://example.com/signup.ashx:从“http://example.com/signup.ashx”重定向到“http://0.0.0.0:8000/?result=success”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://0.0.0.0:8000' 因此不允许访问。

如何让jqueryajax在表单提交成功后不跟随重定向?

基本上我的ajax 调用是成功的,但是由于CORS 错误ajax.fail() 被调用而不是ajax.done()

似乎ajax 遵循重定向transparently 并且有一些考虑添加允许覆盖此行为的方法...

我的代码真的很简单:

form.on("submit", function(e) {
    e.preventDefault();
    $.ajax({
        type: "POST",
        url: url,
        data: data
    }).done(function(data) {
        // do something on success
    }).fail(function(data) {
        // do something on failure
    });
});

如果一个人可以同时访问backendfrontend,这是一项微不足道的任务,但如果必须处理远程 API,这将是一项相当大的挑战。

我确实想知道,为什么在 21 世纪2nd 十年(那个时候,其他服务器和我们自己的服务器一样重要)JQuery 仍然有这个问题吗?

【问题讨论】:

  • cors 是一个中间件,所以它会在成功之前失败。发生了什么
  • 你能详细说明一下吗?
  • 如果您没有跨域访问,则在您的标头上,将不会调用来自服务器的 post 方法。它会到达那里并返回失败。你需要修复 cors
  • @VictorOliveira 这就是我在问题中所说的 - CORS 错误。我无法控制第三方服务器,因此无法控制 CORS。
  • 如果他们具有跨域访问权限,您只需在请求的标头中进行设置。如果他们不接受跨域访问,那么你就无能为力了。

标签: javascript jquery ajax cors


【解决方案1】:

如果您没有任何其他任务正在运行,您可以停止 javascript 传播。它将在任何用户操作时重新开始。

古老而稳健的方式:

window.stop() // Stop all js in the window context

使用try..catch 会更好。

try{
     // ajax stuff here
}
catch(nope){ console.log(nope) } // No errors

或者我们也可以抛出一个(新的)错误,这将退出您的任务并发出警告。在某些情况下,它可以用于简化。

throw "Error!"; // ⚠ Error! (Task stopped when thrown)

对于您的确切查询,fetch api 具有 Disallowing redirects 功能:

fetch("awesome-picture.jpg", { redirect: "error" }).then(function(response) {
  return response.blob();
}).then(function(imageBlob) {
  let imgObjectURL = URL.createObjectURL(imageBlob);
  document.getElementById("img-element-id").src = imgObjectURL;
});

另见fetch()

【讨论】:

  • 我试过这种方法。使用{ redirect: "error" } 设置,我得到了错误(毫不奇怪),所以它并不理想,因为我需要默默地忽略重定向。因此我尝试了{ redirect: "manual" },在这种情况下我可以测试response.status 代码,但大概是因为重定向尚未完成,我得到了等于0 的奇怪状态代码,这也不理想,因为它没有不要告诉我我的post 请求发生了什么。
  • 伤心无能为力。无论如何,它应该是易于解析的服务器端,就像 php-curl 一样。
猜你喜欢
  • 2012-03-19
  • 2017-08-13
  • 1970-01-01
  • 2011-03-02
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多