Laravel中JQuery发起AJAX请求偶尔返回302 found错误如何解决
解决方案
- 修正AJAX CSRF令牌配置错误
你当前的$.ajaxSetup配置键名错误,未指定正确的CSRF请求头字段,导致令牌未正确传递,会话过期时就会触发302重定向,修改为如下代码:
- 修正AJAX CSRF令牌配置错误
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') } });
- 修正表单提交路径不匹配问题
你表单中配置的action="{{ url('login') }}"和实际定义的登录路由/user-login不匹配,如果项目中存在Laravel默认生成的/login路由,请求会被错误分发到默认路由,导致逻辑异常返回302,修改表单action为正确路由:
- 修正表单提交路径不匹配问题
<form id="user-login" class="login" action="{{ route('user-login') }}" method="post">
- 适配AJAX请求的重定向逻辑
你当前的RedirectIfAuthenticated中间件未对AJAX请求做特殊处理,已登录用户再次提交登录请求时会直接返回302重定向,AJAX异步请求无法处理该响应就会卡住,修改中间件代码如下:
- 适配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(); } } });
- 处理CSRF令牌过期异常
Laravel默认会话过期后CSRF校验失败会返回302重定向,在App\Exceptions\Handler中添加异常处理逻辑,针对AJAX请求返回JSON响应:
- 处理CSRF令牌过期异常
public function render($request, Throwable $exception) { if ($exception instanceof \Illuminate\Session\TokenMismatchException && $request->expectsJson()) { return response()->json(['message' => '页面已过期,请刷新后重试'], 419); } return parent::render($request, $exception); }
- 检查路由分组配置
确认你的登录路由已经放在web中间件组下,只有该分组下才会初始化会话、启用CSRF校验,避免路由逻辑异常。
- 检查路由分组配置
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

