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

Laravel 8中如何将JSON编码数组展示在SweetAlert弹窗中

问题背景

我当前使用Laravel 8框架搭配Sweet Alert扩展包,希望将Exception异常捕获到的错误信息通过Sweet Alert错误弹窗进行展示。
初始控制器方法逻辑如下:

try{
   ...
}catch(\Exception $e){
   // Alert::error('Error Title', 'Error Message');

   return json_encode(['status' => '500', 'msg' => __('message.error-server')]);
}

我将错误信息存入关联数组后做了JSON编码,但不需要直接返回该JSON响应,而是要调用Alert::error(...)方法把对应信息渲染成弹窗提示,需要实现该效果。


调试过程

第一次测试(未弹出错误提示)

测试代码如下,运行后没有弹出对应错误Alert:

public function destroy(User $user)
    {
        try{
            $useradasd->is_active = 0;
            $useradasd->is_deleted = 1;
            $useradasd->remover_id = Auth::id();
            $useradasd->save();
        }catch(\Exception $e){
            $attributes = ['status' => '500', 'msg' => __('message.error-server')];

            $dataAttributes = array_map(function($value, $key) {
                return $key.'=>'.$value;
            }, array_values($attributes), array_keys($attributes));

            $associativeString = implode(', ', $dataAttributes);
            Alert::error($associativeString);
        }
        Alert::success('Removed', 'That user is deleted');
        return back();
    }

第二次测试(异常未捕获,弹出成功提示)

调整写法传入错误标题参数后,异常没有被捕获,页面直接弹出Alert::success(...)对应的成功提示:

public function destroy(User $user)
    {
        try{
            $useradasd->is_active = 0;
            $useradasd->is_deleted = 1;
            $useradasd->remover_id = Auth::id();
            $useradasd->save();
        }catch(\Exception $e){
            $attributes = ['status' => '500', 'msg' => __('message.error-server')];

            $dataAttributes = array_map(function($value, $key) {
                return $key.'=>'.$value;
            }, array_values($attributes), array_keys($attributes));

            $associativeString = implode(', ', $dataAttributes);
            Alert::error('Error',$associativeString);
        }
        Alert::success('Removed', 'That user is deleted');
        return back();
    }

当前进度

目前已经可以成功触发错误弹窗,效果如下:
错误弹窗效果截图
需要实现的效果是:把$attributes['status']的值(即500)作为错误弹窗的标题,$attributes['msg']作为弹窗正文内容。


解决方案

之前的写法存在两个核心问题:

  1. catch块执行完没有终止后续逻辑,无论是否触发异常,catch块外的Alert::success()都会执行,直接覆盖掉错误提示
  2. 不需要手动把数组拼接成字符串,Alert::error()原生支持两个参数,第一个参数对应弹窗标题,第二个参数对应弹窗正文,直接传入对应字段即可

修正后的完整代码如下:

public function destroy(User $user)
{
    try{
        // 注意替换测试时写的未定义变量$useradasd为正确的模型实例
        $user->is_active = 0;
        $user->is_deleted = 1;
        $user->remover_id = Auth::id();
        $user->save();

        // 成功提示移入try块,仅业务无异常时触发
        Alert::success('Removed', 'That user is deleted');
    }catch(\Exception $e){
        $attributes = ['status' => '500', 'msg' => __('message.error-server')];
        // 直接按参数顺序传入标题、正文即可
        Alert::error((string)$attributes['status'], $attributes['msg']);
    }
    
    return back();
}

关键调整点:

  • 成功提示逻辑移入try块内部,只有业务逻辑正常执行完成才会弹出成功提示
  • catch块内直接读取$attributes数组的对应字段传参,不需要做额外的数组拼接操作
  • 不需要额外return JSON响应,所有弹窗配置完成后统一执行return back()即可,SweetAlert会自动读取闪存的提示信息渲染到页面
  • 开发环境调试时如果需要展示真实报错,可以把第二个参数替换为$e->getMessage(),生产环境建议保留通用错误提示,避免泄露服务器敏感信息

内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:36:32