Я давно искал похожий вопрос, но не смог найти то, что действительно могло бы помочь моей проблеме.
Использование Laravel 5.4.
Итак, у меня есть контроллер ресурса и его метод индекса, который возвращает представление с некоторыми данными, прикрепленными к нему.
Затем я хочу сделать ajax-запрос из возвращенного представления, которое является поисковым запросом.
e.preventDefault();
let q = $('#inputserver').val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: "/servers",
type: 'GET',
data: {'data': q},
success: function(response){
console.log('Successo');
}
})
Для того, чтобы структурировать методы контроллера ресурса, нужно вызвать метод индекса, в котором я хочу определить, есть ли у меня входящий Ajax-запрос.
Если я это сделаю, то по запросу в Eloquent Model я буду искать данные, полученные с помощью формы поиска, и, конечно, я хочу показать только совпадающие результаты.
Это мой код контроллера:
if(!$request->ajax()){
$colonna = 'id';
$servers = Server::orderBy($colonna, 'desc')->paginate(10);
return view('servers.index', array('servers' => $servers));
}
else{
$servers= Server::where('name', '=', $request->data)->paginate(10);
return view('servers.index', array('servers' => $servers));
}
Проблема в том, что ничего не происходит, поэтому запрос ajax даже не рассматривается, может кто-нибудь помочь мне с этим? Я почти уверен, что проблема заключается в некоторых очевидных вещах, которые я забыл или не учел.
Заранее спасибо, я отредактирую, если вам понадобится дополнительная информация об этом.
РЕДАКТИРОВАТЬ:
Это маршрут у меня есть Route::resource('servers', 'ServerController');
EDIT2:
Мне жаль идентификаторы на итальянском языке, но я, конечно, выбираю их правильно при использовании jQuery.
<div class="input-group mb-2 mr-sm-2 mb-sm-0">
<div class="input-group-addon">
<span>
<i class="fa fa-search"></i>
</span>
</div>
{{Form::text('search', null, array('class' => 'form-control', 'id' => 'inputserver' , 'placeholder' => 'Cerca..'))}}
<span class="input-group-btn">
<button class="btn btn-default" type="button" id="cercaserver">Go!</button>
</span>
Файл блейда беспорядочный. Попробуйте создать открытую форму и закрыть форму и сделать кнопку отправки типа. И попробуйте изменить ваш AJAX на это:
$(document).ready(function() {
$('#cercaserver').on('submit', function (e) {
e.preventDefault();
var input = $('#inputserver').val();
$.ajax({
type: "GET",
url: './servers',
data: {input: input},
});
});
});
убедитесь, что вы загружаете jquery.
Что вы имеете в виду под ничем не происходит? Что было показано в консоли при запуске запроса ajax?
Кроме того, вы возвращаете представление, возможно, вы захотите вернуть массив результатов json?
return $servers;
Laravel автоматически преобразует его в ответ JSON
https://laravel.com/docs/5.4/responses#creating-responses
Или, если вы хотите быть конкретным:
return response()->json($servers);
https://laravel.com/docs/5.4/responses#json-responses
Редактировать:
Я думаю, что я уже знаю проблему, в вашей функции контроллера ресурсов index
есть ли параметр называется $request
? Возможно, он не существует, и наверняка выдаст внутреннюю ошибку 500, поскольку вы использовали ее в своем состоянии.