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

Laravel中用jQuery Post关联筛选下拉选项,如何展示控制器返回数据?

问题:使用jQuery Post实现Outlet与Karyawan下拉联动筛选

我正尝试用jQuery Post实现下拉选项联动筛选:选中特定Outlet时,Karyawan下拉选项仅显示该Outlet对应的员工。目前已完成视图、前端脚本及Laravel控制器代码,能正常获取控制器返回的响应数据,但不知道如何把数据渲染到视图的Karyawan下拉框里,求帮助。

视图代码

<div class="form-group">
    <label class="control-label col-md-3 col-sm-3 col-xs-12">Outlet</label>
    <div class="col-md-9 col-sm-9 col-xs-12">
        <select class="form-control" name="outlet" id="outletSelect">
            <option value="">Choose option</option>
            @foreach($outlets as $it)
            <option value="{{$it->id}}">{{$it->nama}}</option>
            @endforeach
        </select>
    </div>
</div>
<div class="form-group">
    <label class="control-label col-md-3 col-sm-3 col-xs-12">Karyawan</label>
    <div class="col-md-9 col-sm-9 col-xs-12">
        <select class="form-control" name="nama">
            @if (isset($kritems))
            @foreach($kritems as $its)
            <option value="{{$its->nama}}">{{$its->nama}}</option>
            @endforeach
            @endif
        </select>
    </div>
</div>

原脚本代码

$(document).ready(function() {
    $('#outletSelect').change(function() {
      var selectedOutlet = $(this).val(); 
      var token = "{{ csrf_token() }}";
      $.ajax({
        url: "{{ route('nilai.choose') }}",
        method: 'POST',
        data: { outlet: selectedOutlet,
              '_token': token, },
        success: function(response) {
            console.log(response);
        },
        error: function() {
          alert('Failed to fetch karyawan.');
        }
      });
    });
  });

控制器代码

public function choose(Request $request)
{
    $outlet = Outlet::findorfail($request->outlet);
    $outlets = Outlet::all();
    $kritems = Karyawan::where('outlet', $request->outlet)->get();

    return $kritems;
}

获取到的响应数据

[{"id":2,"created_at":"2023-05-31T08:36:33.000000Z","updated_at":"2023-05-31T08:48:18.000000Z","user_id":18,"nama":"Hidayat","nik":"3376012705950002","nomor":"333444","alamat":"jlnjlm","email":"dayat@test.com","pendidikan":"s2","tanggal_bergabung":"2023-05-24","outlet":"6","jabatan":"Section Head of IT","divisi":"IT","url_foto":"ff.jpg"}]

解决方案

步骤1:给Karyawan下拉框添加ID

先修改视图里的Karyawan下拉框,添加id="karyawanSelect",方便JS快速定位元素:

<select class="form-control" name="nama" id="karyawanSelect">

步骤2:修改脚本渲染数据

在AJAX的success回调中,清空原有选项并遍历响应数据生成新选项:

$(document).ready(function() {
    $('#outletSelect').change(function() {
      var selectedOutlet = $(this).val(); 
      var token = "{{ csrf_token() }}";
      const karyawanSelect = $('#karyawanSelect');

      $.ajax({
        url: "{{ route('nilai.choose') }}",
        method: 'POST',
        data: { outlet: selectedOutlet, '_token': token },
        success: function(response) {
            // 清空下拉框原有内容,避免旧数据残留
            karyawanSelect.empty();
            // 添加默认提示选项,保持交互一致性
            karyawanSelect.append('<option value="">Choose option</option>');
            // 遍历响应数据生成员工选项
            $.each(response, function(index, karyawan) {
                karyawanSelect.append(`<option value="${karyawan.nama}">${karyawan.nama}</option>`);
            });
        },
        error: function() {
          alert('Failed to fetch karyawan.');
        }
      });
    });
  });

说明

  • 清空原有选项是为了确保每次选择Outlet后,下拉框只显示对应员工;
  • 使用模板字符串生成选项标签,代码更简洁易读;
  • 若需要将员工ID作为选项值(而非姓名),只需把karyawan.nama替换为karyawan.id即可。

内容的提问来源于stack exchange,提问作者M. Rivaldi Anwar Putra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:05:23