Как передать поле выбора и текстовое значение из формы поиска в контроллер, используя ajax? - PullRequest
0 голосов
/ 08 января 2019

Я делаю поисковый фильтр, фильтруя состояния, категории, уровни и возраст. Пользователь выберет значение, используя поля выбора и текстовое поле. Как только пользователь нажмет кнопку, ajax отправит информацию на контроллер для фильтрации. Код для формы ниже:

<div class="form-group">
            <div class="row">
              <div class="col-lg-2"> 
                {{ Form::label('negeri_lahir_peg', 'Negeri Lahir Pegawai') }}
              </div>
              <div class="col-lg-2"> 
                {{ Form::select('negeri_lahir', $negeri, '', ['class' => 'form-control select2', 'placeholder' => '--pilih--']) }}
              </div>
            </div>
        </div>

         <div class="form-group">
          <div class="row">
              <div class="col-lg-2">
                <label for="kategori">Kategori:</label>
              </div>
              <div class="col-lg-3"> 
                <select name="kategori" class="form-control select2" style="width:250px">
                    <option value="">-- pilih --</option>
                    @foreach ($categories as $key => $value)
                    <option value="{{ $key }}">{{ $value }}</option>
                    @endforeach
                </select>
              </div>
          </div>
        </div>

        <div class="form-group">
            <div class="row">
              <div class="col-lg-2">
                <label for="pang">Pangkat:</label>
              </div>
              <div class="col-lg-3"> 
                <select name="pangkat" class="form-control select2"style="width:250px">
                <option>-- pilih --</option>
                </select>
              </div>
            </div>
        </div>

        <div class="form-group">
            <div class="row">
              <div class="col-lg-2"> 
                {{ Form::label('umur_peg', 'Umur') }}
              </div>
              <div class="col-lg-1"> 
                {{ Form::text('umur', '', ['class' => 'form-control', 'placeholder' => '']) }}
              </div>
              <div class="col-lg-3"> 
                {{ Form::label('tahun', 'tahun ke atas') }}
              </div>
            </div>
        </div>

Кнопка для отправки значения в ajax:

 <button id="cari" class="btn btn-sm btn-primary"> Cari </button>

Я пытался отфильтровать negeri_lahir только в приведенном ниже коде ajax, но в режиме отладчика появилось сообщение 'negeri_lahir is undefined'.

  <script type="text/javascript">
  $( "#cari" ).click(function() {

      var negeri = $("#negeri_lahir").val();
       $.ajax({
          url: '{{ url('calon') }}',
          data: 'negeri_lahir=' + negeri ,
          dataType: 'json',
          success: function (data) {
              console.log(data);
              $('#datatable tr').not(':first').not(':last').remove();
              var html = '';
              for(var i = 0; i < data.length; i++){
                  html += '<tr>'+
                              '<td>' + data[i].name + '</td>' +
                          '</tr>';
                  }   
              $('#datatable tr').first().after(html);
          },
          error: function (data) {
          }
      });
  });

</script> 

Код контроллера следующий:

  $query = DB::table('itemregistrations')
    // ->join('categories', 'itemregistrations.categoryid', '=','categories.categoryid')
    // ->join('operasi', 'itemregistrations.operasiid', '=', 'operasi.operasiid')
    ->select('itemregistrations.ItemRegistrationID','itemregistrations.name', 'itemregistrations.Nobadan');

    if(request('umur')) {
        $query->whereRaw('YEAR(CURDATE()) - lahir_yy >= ?', [request('umur')]);  
    }

    if(request('negeri_lahir')) {
        $query->where('NegeriID', request('negeri_lahir'));
    }

    if(request('kategori')) {
        $query->where('CategoryID', request('kategori'));
    }

    if(request('pangkat')) {
        $query->where('OperasiID', request('pangkat'));
    }

$newitem = $query->get();
// dd($newitem);
return response::json($newitem);    

Как правильно передать значение фильтра по пользователям в ajax, чтобы оно могло обрабатываться контроллером? благодарю вас.

1 Ответ

0 голосов
/ 08 января 2019

Я думаю, что вы допустили ошибки в двух местах.

  1. При передаче данных в функции ajax
  2. Способ доступа к нему в контроллере.

Используйте следующие исправления.

Импортируйте следующую библиотеку в ваш контроллер, использовать Illuminate \ Http \ Request;

А затем в функции контроллера

function someName(Request $request){
    $request->input('negeri_lahir');
}

В своем коде JS передайте его следующим образом:

data: {'negeri_lahir': negeri} ,

Надеюсь, это поможет.

...