Я работаю с Laravel 5.8 и пытаюсь настроить нумерацию страниц с помощью живого поиска через AJAX. Я настроил его так, чтобы нумерация страниц обновлялась при отправке данных через GET-запрос из-за поиска AJAX. Единственное, что не работает - это ссылка, когда я нажимаю, чтобы перейти на следующую страницу.
Когда я нажимаю на ссылку разбиения на страницы при первой загрузке страницы, URL-адрес выглядит следующим образом http://localhost:8000/pagination?page=2
и отображает эту страницу соответствующим образом.
Если я использую поиск в режиме реального времени и нажимаю на ссылку нумерации страниц, URL-адрес выглядит так http://localhost:8000/search?page=2
и ничего не отображается.
Это AJAX в моем pagination.blade.php
файле:
$(function getResults(url) {
$('#search').on('keyup',function(){
$value=$(this).val();
$.ajax({
type: 'GET',
url: '{{URL::to('search')}}',
data:{ 'search':$value },
success:function(data){
console.log(data);
$('tbody').empty();
$('tbody').html(data);
},
error: function(err) {
console.log(err);
}
});
});
$(function() {
$('body').on('click', '.pagination a', function(e) {
e.preventDefault();
var url = $(this).attr('href');
getResults(url);
window.history.pushState("", "", url);
console.log(url);
});
});
Это мой web.php
файл:
Route::get('/search', 'SearchController@search');
Route::resource('/pagination', 'SearchController');
Моя пагинация отображается в моем файле SearchController.php
через $projects->render();
Дайте мне знать, если вы хотите, чтобы я добавил больше кода. Я действительно ценю любую помощь, которую вы можете оказать!
РЕДАКТИРОВАТЬ: Добавление SearchController.php
код:
public function index(Request $request)
{
$projects = Project::orderBy('name', 'asc')->paginate(5);
if ($request->ajax()){
return view('pagination_data', ['projects' => $projects])->render();
}
return view('pagination', compact('projects'));
}
public function search(Request $request)
{
if($request->ajax())
{
$projects=DB::table('projects')->where('name', 'LIKE', '%'.$request->search."%")->orwhere('description', 'LIKE', '%'.$request->search."%")->orderBy('name', 'asc')->paginate(5);
$resultCount = DB::table('projects')->count();
if($projects)
{
$output=$projects->render();
foreach ($projects as $project) {
$output.='<tr>'.
'<td>'.
'<a href="'. $project->link .'" target="_blank">'.
$project->name.
'</a>'.
'</td>'.
'<td>'.
$project->description.
'</td>'.
'<td>'.
$project->creator.
'</td>'.
'</tr>';
}
return Response($output);
}
else {
$output='<tr class="alert alert-danger" role="alert">No projects found :(</tr>';
return Response($output);
}
}
}
}
РЕДАКТИРОВАТЬ: Я исправил проблему http://localhost:8000/%7B%7B$project-%3Elink%7D%7D
и обновил код выше.
РЕДАКТИРОВАТЬ, 6/1: Я еще более сузил проблему - похоже, что ссылки на страницы разбиты на страницы после обновления поиска в реальном времени AJAX. http://localhost:8000/pagination?page=2
всегда относится к исходным строкам (перед поиском). Я думаю, что ключом к решению этой проблемы будет обновление исходной ссылки из файла SearchController
. Каждый раз, когда выполняется поиск в реальном времени, извлекается код SearchController
.