Laravel中Blade发送AJAX请求到控制器后重定向无效应如何处理
你当前的实现不生效的核心原因是:AJAX是异步请求,服务端返回的302重定向指令只会被AJAX引擎处理,不会触发浏览器整页跳转或刷新。你需要调整前后端逻辑,由前端接收操作成功信号后主动触发页面刷新,具体修改方案如下:
1. 修改控制器返回逻辑
不要返回重定向响应,改为返回JSON格式的操作状态标识:
if($validationPasses){ return response()->json([ 'updated' => true, // 可选:返回需要跳转的路由地址,灵活性更高 'redirect_url' => route('ticket_dashboard') ]); }
2. 修改Blade模板中的AJAX回调
在请求成功的回调中判断操作状态,主动触发页面刷新/跳转:
$.ajax({ type: "post", url: "{{env('APP_URL')}}/ticket-dashboard/updateTicket", dataType:'json', data: {"option":option, "status":status,"ticket_id":manual_ticket_id,'completed_id':'{{$user}}',"latest_ticket_log_id":latest_ticket_log_id,_token: '{{csrf_token()}}'}, success: function (data) { console.log('-------'); console.log(data); if(data['updated']){ alert("所选任务已更新,对工单执行新操作前需刷新页面"); // 二选一即可: // 方案1:直接刷新当前页面 location.reload(); // 方案2:跳转到控制器指定的路由地址 // location.href = data.redirect_url; } else { // 处理更新失败的逻辑 } } })
补充:如果不需要用户感知弹窗提示,可直接删除alert代码行,页面会静默刷新。
内容的提问来源于stack exchange,提问作者Yeo Bryan
相关产品推荐
相关产品推荐

