如何使用jQuery将Blade分部模板内容追加到select下拉框中?
现有实现存在的问题
$.get()直接填写Blade分部模板的命名空间路径是无效的。Blade模板是服务端资源,不会直接暴露在公网可访问的web目录下,前端无法直接请求到原始模板文件。- 就算能拿到原始Blade文件,里面的
@foreach、{{ }}等模板语法只能在服务端解析,前端JS无法识别,直接返回的原始模板代码插入到页面也无法正常渲染为option选项。 - 该分部模板依赖
$products变量,就算直接让服务端返回模板,没有传入对应变量时会直接抛出服务端渲染错误。
正确实现步骤
- 先新增一个接口路由,用于返回渲染完成的option HTML片段
在routes/web.php中添加如下代码:
// 可根据业务需求调整路由地址、参数、数据查询逻辑 Route::get('/product/options', function () { // 按你的业务逻辑查询产品数据 $products = \App\Models\Product::all(); // 渲染分部模板并返回HTML return view('admin.orders.partials.loop', compact('products')); });
- 修改jQuery代码,将请求地址改为上述新增的路由地址
$.get("/product/options", function(data){ // 如果需要先清空原有选项再插入,可先加一行 $('#inputGroup').empty() $('#inputGroup').append(data); });
额外注意事项
- 如果是重复触发加载的场景,建议加防抖或者加载状态,避免重复插入相同的option选项
- 如果需要按条件筛选产品,可在请求时携带查询参数,路由侧接收参数后调整产品查询逻辑即可
- 原页面初始加载时的
@include('admin.orders.partials.loop')逻辑不受影响,可正常保留
内容的提问来源于stack exchange,提问作者Neil Collado
相关产品推荐
相关产品推荐

