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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:47:09