Laravel, в котором проблема с множественным выбором Ajax

У меня есть флажок множественного выбора, который я использую для определения флажков и передачи этих значений в Laravel Controller с помощью AJAX Get.

Когда я передаю данные Ajax в контроллер, json возвращает только одну коллекцию. Если быть точным, он возвращает только первое значение из переданной строки. Так что, если я выберу 1,2,4,8 в поле. Возвращает проекты category_id = 1. Если я выберу 2,9,10, он вернет только проекты с category_id = 2. Чтобы проверить правильность ввода, я передал вход для просмотра, а также в console.log, который всегда говорит, что ввод правильный.

Я могу получить все проекты, но когда я использую whereIn и передаю данные, он получает только коллекцию первого значения в переданном массиве.

Я попытался превратить его в массив и передать:
1) передача ajax-данных в массив, затем преобразование в строку с использованием implode и передача ее в массиве whereIn
2) передача массива напрямую в whereIn

Я также приложил несколько запросов, которые я попытался с ошибкой.

Любое предложение будет иметь огромную помощь.

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]);
}

Ajax & Jquery Selector

  $(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() превратить полученный объект jQuery в истинный массив.
  • Используйте встроенный Array.toString метод.
  • Лучше использовать POST вместо GET,
  • + Изменить 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();
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]