You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

解决jQuery AJAX跨域重定向导致的fail()问题

这个问题我之前也碰到过!核心原因是:你的AJAX请求其实已经成功触发了后端接口的逻辑,但接口返回了重定向(3xx状态码),浏览器会自动发起对重定向地址的请求,而这个新地址没配置Access-Control-Allow-Origin允许你的源(http://0.0.0.0:8000),所以触发了CORS错误,导致jQuery误判请求失败进入fail()。

下面给你两个可行的解决方案:

方案一:拦截AJAX的自动重定向(前端处理)

通过jQuery的beforeSend钩子,我们可以给底层的XMLHttpRequest绑定自定义的状态监听,阻止它自动跟随重定向,手动处理成功逻辑:

$.ajax({
  url: 'http://example.com/signup.ashx',
  type: 'POST',
  data: $('#your-form').serialize(), // 替换成你的表单数据
  beforeSend: function(xhr) {
    // 保存原始的状态监听函数,避免覆盖默认逻辑
    const originalOnReady = xhr.onreadystatechange;
    xhr.onreadystatechange = function() {
      // 当请求完成(readyState=4)时检查状态码
      if (xhr.readyState === 4) {
        // 匹配所有重定向状态码(301/302/303等)
        if (xhr.status >= 300 && xhr.status < 400) {
          // 终止请求,阻止浏览器自动跳转
          xhr.abort();
          // 手动触发你的成功逻辑
          handleSuccess();
        } else {
          // 非重定向状态,按jQuery默认逻辑处理
          if (originalOnReady) originalOnReady.apply(this, arguments);
        }
      }
    };
  },
  success: function(response) {
    // 正常成功响应(非重定向)会走到这里
    handleSuccess();
  },
  error: function(xhr, status, err) {
    // 只有真正的请求错误(比如网络问题、500错误)才会触发这里
    console.error('请求真的出错了:', err);
  }
});

function handleSuccess() {
  // 这里写你原本想在success里执行的代码
  alert('表单提交成功!');
  // 比如刷新页面、跳转站内地址等
}

方案二:修改后端接口(根源解决)

如果能控制后端代码,最好的方案是让接口不要返回重定向,而是直接返回JSON格式的成功响应,比如:

{ "result": "success", "message": "注册成功" }

这样浏览器不会触发自动跳转,只要后端给原接口配置好Access-Control-Allow-Origin: http://0.0.0.0:8000(生产环境不建议用*),就能正常进入jQuery的success()回调,从根源避免CORS问题。

内容的提问来源于stack exchange,提问作者NarūnasK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:32:09