Laravel捕获重复异常时JavaScript Alert无法弹出问题求助
问题分析与解决方案
问题根源
你的代码中,捕获到重复数据异常(错误码23000)时虽然输出了JavaScript弹窗代码,但紧接着执行了return redirect()->back();。浏览器收到服务器的重定向响应后,会直接跳转到上一页,不会渲染当前输出的script代码,导致弹窗完全没有执行机会。
解决方案
推荐使用Laravel的Session闪存消息实现需求,这是符合框架规范的标准做法:
步骤1:控制器中存储闪存消息
修改catch块逻辑,将提示消息存入session后再重定向:
public function storeNeraca(Request $request) { try { $neraca = new Neraca; $neraca->outlet = $request->outlet; $neraca->bulan = $request->bulan; $neraca->tahun = $request->tahun; $neraca->kode = $request->outlet.$request->bulan.$request->tahun; $neraca->save(); } catch (Exception $e) { if ($e->getCode() == 23000) { // 将提示消息存入session闪存 session()->flash('error', 'Data yang diminta sudah tersedia'); } } return redirect()->back(); }
步骤2:前端视图添加弹窗逻辑
在你的主布局文件(如resources/views/layouts/app.blade.php)或当前页面视图中,添加以下代码检测session消息并弹出alert:
@if(session('error')) <script> alert("{{ session('error') }}"); </script> @endif
临时替代方案(不推荐)
如果不想使用session,也可以通过手动延迟跳转让弹窗先执行,但这种方式不够优雅:
catch (Exception $e) { if ($e->getCode() == 23000) { echo '<script language="javascript">'; echo 'alert("Data yang diminta sudah tersedia");'; echo 'window.location.href = document.referrer;'; // 手动跳回上一页 echo '</script>'; exit; // 终止后续代码,避免Laravel默认重定向 } } // 移除原有的return redirect()->back();
内容的提问来源于stack exchange,提问作者M. Rivaldi Anwar Putra
相关产品推荐
相关产品推荐

