Laravel控制器传对象到Blade模板时触发JavaScript语法错误
错误原因
一共两处问题共同导致报错:
- 控制器PHP代码存在语法错误:定义
$data对象的关联数组时,'modal' => $modal行末尾缺失逗号分隔符,PHP无法正常解析数组结构,会直接抛出语法异常,导致数据无法正常传递到视图。 - Blade模板JS块变量使用方式错误:JavaScript代码块中直接书写PHP语法
$data->modal时,Blade模板引擎不会自动解析该PHP变量并输出为JavaScript可识别的字面量,JavaScript运行时会将$data识别为未定义的JS对象,直接抛出引用错误;即便手动加了{{ }}输出,如果不对字符串做转义处理,变量值包含引号、换行等特殊字符时也会触发JS语法错误。
修复方案
- 先修复控制器的数组语法错误,补全缺失的逗号分隔符:
public function buku_all($page, $modal) { $data = (object) [ 'sidebar' => "pelayanan", 'breadcrumbsub' => 'Data Buku', 'modal' => $modal, 'page' => $page ]; return view('admin.buku')->with('data', $data); }
- 修改Blade模板中JavaScript块的变量输出逻辑,使用Blade官方提供的
@json指令输出变量,自动处理转义、类型适配问题,避免JS语法错误:
// 将PHP变量值输出为标准JS字面量,自动处理特殊字符转义 const currentModal = @json($data->modal); if (currentModal === 'book') { $(window).on('load', function() { $('#modal_edit_1').modal('show'); }); }
注意:不要直接写
const currentModal = "{{ $data->modal }}"这类写法,当变量值包含双引号、换行、斜杠等特殊字符时,依然会破坏JS语法结构,@json是Laravel官方推荐的向JS传递变量的安全写法。
内容的提问来源于stack exchange,提问作者noob all the time
相关产品推荐
相关产品推荐

