AJAX请求后返回Redirect页面未刷新且未显示消息的问题
问题根源
你当前用AJAX发起删除请求,但控制器返回的redirect()->with()是给浏览器的重定向指令——AJAX会直接接收这个HTTP响应,不会触发浏览器自动跳转,同时存在session里的提示消息也没法在当前页面显示,所以才出现页面没刷新、没提示的问题。
解决办法
办法1:不用AJAX,直接用链接/表单跳转
如果不需要异步处理,把按钮改成普通跳转链接:
- Blade按钮修改:
<a href="{{ $base_url }}/offer/delete/{{ $offer->id }}" onclick="return confirm('确定要删除吗?')">删除</a>
- 控制器代码保持不变:
return redirect('offer/delete')->with('message','This Service Is Unavailable');
- 最后在
offer/delete页面的Blade模板里加提示展示:
@if(session('message')) <div class="alert alert-warning"> {{ session('message') }} </div> @endif
办法2:保留AJAX,返回JSON响应在前端处理
如果必须用AJAX异步操作,修改控制器返回JSON,前端根据响应做提示和跳转:
- 控制器代码修改:
return response()->json([ 'success' => false, 'message' => 'This Service Is Unavailable', 'redirect_url' => url('offer/delete') ]);
- JavaScript代码更新:
function edit_offer(id, base_url) { $.ajax({ method: "GET", url: base_url + '/offer/delete/' + id, success: function (result) { if (result.success) { Swal.fire({ type: 'success', title: 'Deleted!', text: 'Record has deleted successfully.', showConfirmButton: false, timer: 1000 }).then(() => { // 删除成功后刷新页面或跳转 location.reload(); // 或者跳转到指定页面:window.location.href = result.redirect_url; }) } else { Swal.fire({ type: 'error', title: '提示', text: result.message }).then(() => { // 跳转到目标页面 window.location.href = result.redirect_url; }) } }, error: function (err) { Swal.fire({ type: 'error', title: 'Oops...', text: 'This record is connected with another data!' }) } }); }
- Blade按钮保持原写法即可:
onclick="edit_offer({{$offer->id}},'{{$base_url}}')"
核心提示
- AJAX请求不会自动处理重定向,必须在JS里通过
window.location.href手动触发跳转 ->with('message')是把消息存在session中,只有浏览器跳转后的页面才能读取,AJAX拿不到这个值,所以改用JSON返回消息更适配异步场景
内容的提问来源于stack exchange,提问作者Ravi Parmar
相关产品推荐
相关产品推荐

