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

Laravel中JQuery发起AJAX请求偶尔返回302 found错误如何解决

解决方案
    1. 修正AJAX CSRF令牌配置错误
      你当前的$.ajaxSetup配置键名错误,未指定正确的CSRF请求头字段,导致令牌未正确传递,会话过期时就会触发302重定向,修改为如下代码:
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
    }
});
    1. 修正表单提交路径不匹配问题
      你表单中配置的action="{{ url('login') }}"和实际定义的登录路由/user-login不匹配,如果项目中存在Laravel默认生成的/login路由,请求会被错误分发到默认路由,导致逻辑异常返回302,修改表单action为正确路由:
<form id="user-login" class="login" action="{{ route('user-login') }}" method="post">
    1. 适配AJAX请求的重定向逻辑
      你当前的RedirectIfAuthenticated中间件未对AJAX请求做特殊处理,已登录用户再次提交登录请求时会直接返回302重定向,AJAX异步请求无法处理该响应就会卡住,修改中间件代码如下:
public function handle($request, Closure $next, $guard = null)
{
    if ($guard == "employee" && Auth::guard($guard)->check()) {
        if ($request->expectsJson()) {
            return response()->json(['redirect' => RouteServiceProvider::EMPLOYEE_HOME], 401);
        }
        return redirect(RouteServiceProvider::EMPLOYEE_HOME);
    }

    if (Auth::guard($guard)->check()) {
        if ($request->expectsJson()) {
            return response()->json(['redirect' => RouteServiceProvider::HOME], 401);
        }
        return redirect(RouteServiceProvider::HOME);
    }

    return $next($request);
}

同时给AJAX请求添加错误回调处理重定向逻辑:

$.ajax({
    url:$(this).attr('action'),
    type:'POST',
    data:formData,
    headers: {
        Accept: "application/json"
    },
    success:function(response) {
        // 原有成功逻辑不变
    },
    error: function(xhr) {
        // 处理重定向场景
        if (xhr.status === 401 && xhr.responseJSON?.redirect) {
            window.location.href = xhr.responseJSON.redirect;
        }
        // 处理CSRF过期场景
        if (xhr.status === 419) {
            alert(xhr.responseJSON.message);
            location.reload();
        }
    }
});
    1. 处理CSRF令牌过期异常
      Laravel默认会话过期后CSRF校验失败会返回302重定向,在App\Exceptions\Handler中添加异常处理逻辑,针对AJAX请求返回JSON响应:
public function render($request, Throwable $exception)
{
    if ($exception instanceof \Illuminate\Session\TokenMismatchException && $request->expectsJson()) {
        return response()->json(['message' => '页面已过期,请刷新后重试'], 419);
    }
    return parent::render($request, $exception);
}
    1. 检查路由分组配置
      确认你的登录路由已经放在web中间件组下,只有该分组下才会初始化会话、启用CSRF校验,避免路由逻辑异常。

内容的提问来源于stack exchange,提问作者user3653474

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:18:02