如何在jQuery拼接的Laravel路由字符串中插入JavaScript变量值?
解决方法
核心问题在于:Laravel的route()函数是后端Blade模板渲染时执行的,而你的JS变量id是前端页面运行时才获取到的动态值,两者无法直接混合使用,必须拆分处理。
下面是两种可行的实现方式:
方式1:拼接基础路由URL
先通过Blade生成包含已知参数($user->nip)的基础路由,再用JS把动态的id拼接到URL末尾:
var id = $(this).val(); // 后端生成带nip的基础路由前缀 var baseRoute = "{{ route('report.pdf', [$user->nip]) }}"; // 拼接id参数得到完整URL var fullUrl = baseRoute + '/' + id; // 渲染按钮HTML $('#button_cetak').html('<a href="' + fullUrl + '" class="btn btn-warning btn-block"><i class="fas fa-print"></i> Cetak</a>');
方式2:占位符替换
先在Blade生成路由时用一个占位符代替动态参数,再用JS替换成实际的id值:
var id = $(this).val(); // 后端生成带占位符的完整路由结构 var routeTemplate = "{{ route('report.pdf', [$user->nip, 'PLACEHOLDER_ID']) }}"; // 替换占位符为真实id var fullUrl = routeTemplate.replace('PLACEHOLDER_ID', id); // 渲染按钮HTML $('#button_cetak').html('<a href="' + fullUrl + '" class="btn btn-warning btn-block"><i class="fas fa-print"></i> Cetak</a>');
注意事项
- 请确保你的Laravel路由
report.pdf定义时包含两个参数,示例如下:Route::get('/report/pdf/{nip}/{id}', [ReportController::class, 'generatePdf'])->name('report.pdf'); - 如果
id是可选参数,需要在路由定义中给参数加上?(如{id?}),但这类打印场景下参数一般为必填。
内容的提问来源于stack exchange,提问作者dwi prihta
相关产品推荐
相关产品推荐

