更改下拉列表时,使用ajax在laravel中过滤数据

时间:2014-04-30 16:48:42

标签: php ajax laravel

我正在尝试使用下拉菜单过滤查询中的记录。想法是在下拉菜单改变时使用过滤器,所以我想解决方案是使用ajax,但我不太了解它以及如何在laravel中使用它。

这是我的控制器:

public function setSelectTestView()
{
    $test         = Test::orderBy('updated_at', 'des')->lists('nom', 'id');
    $cursos       = Curs::orderBy('nom', 'asc')->lists('nom', 'id');
    $assignatures = Assignatura::orderBy('nom', 'asc')->lists('nom', 'id');

    return View::make('Test.results.result_select_test')
        ->with(array('test' => $test, 'cursos' => $cursos, 'asg' => $assignatures));
}

和我的刀片:

<fieldset>
  {{ Form::select('curs', $cursos) }}
  {{ Form::select('assignatura', $asg) }}
</fieldset>

{{ Form::open(array('action' => array('ResultsController@setSelectTestView'))) }}
  </br>                                                
  <fieldset>
    {{ Form::select('test', $test) }}
  </fieldset>
  </br><input type="submit" value="Seleccionar"/>

{{ Form::close() }} 

我想要的是按$testcurs过滤变量assignatura,例如

$test = Test::where('curs_id', $curs_id)->where('assignatura_id', $asg_id);

但是以异步方式执行此操作并应用一个过滤器,具体取决于哪个下拉菜单已更改,但是如果第二个过滤器已更改,则继续应用第一个过滤器(均已应用)

1 个答案:

答案 0 :(得分:2)

您可以先从选择框的onchange()事件中获取过滤器的值,然后通过post将其发送到控制器。

    $('select[name="curs"]').onchange(){
   $cur = $(this).val();
   $asg = $('select[name="assignatura"]').val();
 $.ajax({
    url:'/result/search',
    data:{cur:$cur,asg:$asg;},
    cache:false,
    type:'POST',
    beforeSend: function (xhr) {
        var token = $('meta[name="csrf_token"]').attr('content');

        if (token) {
            return xhr.setRequestHeader('X-CSRF-TOKEN', token);
        }
    },
    success:function(data){ // this is view data returned by controller 
        console.log(data);
        $('#result_container').html(data); // use it to fill your results
    }
})}

将您的路线用作

Route::post('/result/search','ResultController@search');

然后在控制器中使用参数来查询结果。

  public function search(){

$cur_id = Input::get('cur');
$asg_id = Input::get('asg');

    $test = Test::where('curs_id', $cur)->where('assignatura_id', $asg_id);

return view('Test.results.result_select_test',compact('test'));}