Laravel 8扫码功能AJAX请求404 已存在路由仍报错排查
问题根源
报错URL中出现的%7B%7D是URL编码后的左大括号{,本质原因是Blade模板引擎完全没有解析{{ route('daftar_produk.scan') }}这段语法,整段双花括号内容被当成纯文本字符串直接拼到了AJAX请求地址上,最终因为路径不存在返回404。
常见触发原因与解决方法
- 在public目录下的独立静态JS文件中直接写Blade路由语法
这类静态资源由Web服务器直接返回,完全不经过Laravel的Blade编译流程,文件内所有{{ }}语法都会被原样保留为普通字符串。
解决操作:在Blade渲染的页面内,先把解析完成的路由地址存入全局JS变量,静态JS代码直接引用该变量即可。示例:
在Blade页面的script标签中写:
// 这段代码在Blade作用域内,会被正常解析为真实路由地址 window.scanProductRoute = "{{ route('daftar_produk.scan') }}";
静态JS中的AJAX请求替换原硬编码的Blade语法:
$.get({ url: window.scanProductRoute, data: { kode: 扫码识别到的条码值 }, success: function(response) { // 模态框商品数据填充逻辑 } })
- Blade路由语法被包裹在
@verbatim指令块内
Laravel的@verbatim指令会跳过块内所有Blade语法的解析流程,直接输出原文内容。
解决操作:将路由定义的Blade语法移出@verbatim的作用范围,提前声明全局变量后再在块内调用。 - JS引号嵌套冲突破坏Blade解析边界
编写JS字符串拼接逻辑时,如果引号匹配错误,会导致Blade编译器无法正确识别解析边界,最终将双花括号语法输出为原文。
解决操作:优先使用全局变量传值的方式,避开Blade语法和JS单/双引号的嵌套冲突。
效果校验
修改完成后,在浏览器的页面源码视图中找到对应AJAX请求的url配置项,确认值已经替换为真实的接口路径(例如/rezkastore1/daftar-produk/scan)。如果仍能看到{{ route(...) }}的残留文本,说明对应代码块仍未进入Blade编译流程,需要重新检查文件存放位置、指令包裹范围。
内容的提问来源于stack exchange,提问作者Uswatun Hasana
相关产品推荐
相关产品推荐

