2016-10-09 22 views
1

私は、チェックボックスを識別し、それらの値をAJAX Getを使用してLaravel Controllerに渡すために使用する複数選択チェックボックスを持っています。Laravel whereAjaxの複数選択チェックボックス

コントローラにAjaxデータを渡すとき、jsonは1つのコレクションのみを返します。具体的には、渡された文字列の最初の値に対してのみ返されます。だから私はチェックボックスで1,2,4,8を選択します。 category_id = 1のプロジェクトを返します。私が2,9,10を選択すると、category_id = 2のプロジェクトだけが返されます。入力が正しいかどうかを確認するために、私は入力を表示に渡し、console.logにも入力が正しいことを常に伝えました。

すべてのプロジェクトを取得できますが、whereInを使用してデータを渡すと、渡された配列の最初の値のコレクションのみが取得されます。私は配列にそれを作ると通過しようとしている

: 1)通過AJAXデータをアレイに、次いで内破使用して文字列に変換して、アレイ内のそれを通過した前記直接配列を渡す 2)請求

私も失敗して試したいくつかのクエリを添付している。

どのような提案でも大いに役立つでしょう。真の配列に結果のjQueryオブジェクトをオンにする

ProjectsController

public function getPaginate(Request $request) { 

$input = array(Input::get('categories')); 
//$input2 = array($input); 
//$value = implode(',', $input); 
$sql = [1,2]; 

$projects = \App\Project::whereIn('category_id' , $sql)->get(); //working 
//$projects = DB::table('projects')->whereIn('category_id', array($value))->get(); 
//$projects = DB::select("select * from categories INNER JOIN projects on categories.id = projects.category_id where category_id IN('$value')"); 


//$projects = \App\Project::paginate(4); 
$categories = \App\Category::all(); 


// $projects = DB::select('select * from categories INNER JOIN projects on categories.id = projects.category_id where category_id IN('.$products.')'); 

    // changed for AJAX 
    if(Request::ajax()) { 


     $projects = \App\Project::whereIn('category_id' ,$input)->get(); //not working 
    //$value = implode(',', $input); 
    //return Response::json(View::make('layouts.projects',array('projects'=>$input))->render()); 

    return Response::json(array('projects' =>$projects,'input'=>$input)); 
    } 

    return view('paginate', ['projects' =>$projects,'categories'=>$categories]); 
} 

アヤックス& jQueryのセレクタ

$(document).ready(function() { 
      $('input[type="checkbox"]').on('change', function(event) { 
       var checkboxValues = []; 
         $('input[type="checkbox"]:checked').each(function(index, elem) { 
        checkboxValues.push($(elem).val()); 

       }); 
       $('#myResponse').html(checkboxValues.join(',')); 
       categories = checkboxValues.join(','); 
       getfilters(); 
      }); 
     }); 

     var getfilters = function() { 
      $.ajax({ 
      type: 'GET', 
      headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      }, 
      url: '{{URL::route('get.paginate')}}', 
      data: {categories: categories}, 
      error: function(e) { 
      console.log(e.responseText); 
      }, 

      success: function (data) { 
      console.log(data); 
      $('#projects').html(data); 

      }}); 
     }; 

答えて

1
  • コール.get()
  • 組み込みのArray.toStringメソッドを使用します。
  • GETの代わりにPOSTを使用することをお勧めします。
  • array(Input::get('categories'))からInput::get('categories')に変更してください。

var categories; 
var getfilters = function() { 
    $.ajax({ 
     type: 'POST', 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     }, 
     url: '', 
     data: {categories: categories}, 
     error: function(e) { 
      console.log(e.responseText); 
     }, 
     success: function (data) { 
      console.log(data); 
      $('#projects').html(data); 
     }}); 
}; 

$(':checkbox').on('change', function(event) { 
    event.preventDefault(); 
    categories = $("input:checkbox:checked").map(function(){ 
     return $(this).val(); 
    }).get(); // <---- 
    $('#myResponse').html(categories.toString()); // <---- 'one,two,three; 
    getfilters(); 
}); 
+0

.MAPとに.get()が魅力のように働きました!ありがとう、トン。 私はPHPのデータ型を変更する方法に集中しましたが、クエリ自体には集中しませんでした。 – avinash

+0

偉大な、答えを投票して自由に感じる。 –

関連する問題