How to paginate the result of ajax search. In Laravel pagination is quite easy. In my situation using ajax search with parameters making it complicated. I hope someone encountered with same issue.
Search Form
<form class="" action="studentSearch" method="get" id="formSearchStudent">
<label class="col-sm-1 control-label">Нэр</label>
<div class="col-sm-2">
<input type="text" class="form-control" name="firstname">
</div>
<label class="col-sm-1 control-label">Нэвтрэх нэр</label>
<div class="col-sm-2">
<input type="text" class="form-control" name="username">
</div>
<label class="col-sm-1 control-label">Анги түвшин</label>
<div class="col-sm-1">
<select class="select2_single form-control" name="grade_levels_id">
@foreach($grade_levels as $level)
<option value="{{$level->id}}">{{$level->title}}</option>
@endforeach
</select>
</div>
<label class="col-sm-1 control-label">Төлөв</label>
<div class="col-sm-2">
<select class="select2_single form-control" name="system_codes_id">
@foreach($system_codes as $sc)
<option value="{{$sc->id}}">{{$sc->title}}</option>
@endforeach
</select>
</div>
<button type="submit" class="btn btn-success"><i class="fa fa-search"></i> Хайх</button>
</form>
Search Ajax
$('#formSearchStudent').on('submit', function (e){
e.preventDefault();
// Get search parameters
var formData = $('#formSearchStudent').serialize();
$.ajax({
type:'get',
url:'{{URL::to('edu/pages/studentSearch')}}',
data: formData,
success: function (data)
{
var row = '';
for(var i = 0; i < data.length; i++)
{
row += '<tr class="even pointer" id="row_student'+data[i].id+'">'+
'<td>' + (i+1) + '</td>'+
'<td>' + data[i].lastname + '</td>'+
'<td>' + data[i].firstname + '</td>'+
'<td>' + data[i].username + '</td>'+
'<td>' + data[i].title + '</td>'+
'<td>' + data[i].phone + '</td>'+
'<td>' + data[i].email + '</td>'+
'</tr>';
}
$('#student_body').html(row);
}
})
});
Search Controller
public function studentSearch(Request $request)
{
if($request->ajax())
{
$schools_id = session()->get('key');
if(!empty($request->all()))
{
$firstname = $request->firstname;
$username = $request->username;
$grade_levels_id = $request->grade_levels_id;
$system_codes_id = $request->system_codes_id;
$data = DB::table('users')
->join('students', 'users.id', '=', 'students.user_id')
->join('schools', 'schools.id', '=', 'users.schools_id')
->join('user_profiles', 'user_profiles.id', '=', 'users.user_profiles_id')
->join('grade_levels', 'grade_levels.id', '=', 'students.grade_levels_id')
->join('system_codes', 'system_codes.id', '=', 'users.system_codes_id')
->where('users.schools_id', $schools_id)
->where('users.user_profiles_id', 5)
->where('users.firstname', 'LIKE', '%'.$firstname.'%')
->where('users.username', 'LIKE', '%'.$username.'%')
->where('students.grade_levels_id', $grade_levels_id)
->where('users.system_codes_id', $system_codes_id)
->select('users.id', 'users.firstname', 'users.phone', 'users.email', 'grade_levels.title', 'users.lastname', 'users.username')->paginate(5);
return Response($data);
}
}
}
Route
Route::get('edu/pages/studentSearch', 'SearchController@studentSearch');
Searching works fine. I really confused with router. For example: ajax search url will be
http://localhost:8000/edu/pages/studentSearch?firstname=&username=&grade_levels_id=1&system_codes_id=1
But using paginate returns following url.
http:\/\/localhost:8000\/edu\/pages\/studentSearch?page=2
How to paginate with ajax search ?
@Snapey Could you help me with it ?