Я столкнулся с проблемой, которую я не могу решить (я даже не могу понять, как это сделать).
У меня есть четыре ссылки:
По умолчанию, когда мы приходим на страницу, у нас есть все данные (все ссылки). Я создал кнопку "загрузить больше", чтобы загрузить больше данных в нижней части страницы.
Мне бы хотелось, когда я нажимаю "3D" или "WEB", он делает мне AJAX-запрос на основе SQL-запроса или что-то в этом контроллере, чтобы я мог получать нужные мне данные.
Вот мой контроллер:
public function indexGraduated(Request $request)
{
$students = Student::orderBy('year', 'desc')->inRandomOrder()->paginate(12);
if($request->ajax())
{
return [
'students' => view('ajax.graduate',
[
'students' => $students,
'orientations' => $this->getOrientation()
])->render(),
'next_page' => $students->nextPageUrl()
];
}
return view('pages.graduate', [
'students' => $students,
'orientations' => $this->getOrientation()
]);
}
Вот мой код ajax:
$.ajax({
url: page,
beforeSend: function () {
button.addClass('loading');
},
success: function (data) {
$('.container').append(data.students);
button.attr('href', data.next_page);
button.removeClass('loading');
},
})
Каков правильный способ сделать это?
большое спасибо вам
Одним из способов было бы иметь скрытое поле на странице и установить его значение в соответствии с выбранной ссылкой.
На странице просмотра держите скрытое поле
<input type="hidden" name="filter" id="filter" value="all">
Определите 4 ссылки, например,
<a href="javascript:setFilter('all');">All</a>
<a href="javascript:setFilter('3d');">3D</a>
<a href="javascript:setFilter('2d');">2D</a>
<a href="javascript:setFilter('web');">Web</a>
Javascript
<script type="text/javascript">
function setFilter(f) {
switch (f) {
// all
case 'all':
document.getElementById('filter').value = 'all';
break;
case '2d':
document.getElementById('filter').value = '2d';
break;
// and so on
}
}
</script>
AJAX
$.ajax({
url: the_url,
data: {
input: $('#filter').val();,
},
...
Теперь в контроллере получите значение input
и соответственно запишите записи.