#ajax #laravel
#ajax #laravel
Вопрос:
Я новичок в Laravel и пытаюсь реализовать поиск и фильтрацию в реальном времени в своем проекте, но это вообще не работает. Я не очень разбираюсь в версии ajax и просто копирую вставленный код с другого веб-сайта. Я пытался понять код, и я думаю, что он правильный, но он не работает, поэтому, пожалуйста, помогите. Спасибо
Вот мой контроллер
public function search(Request $request)
{
if($request->ajax())
{
$output = '';
$query = $request->get('query');
if($query != '')
{
$data = Service::table('service')
->where('keterangan', 'like', '%'.$query.'%')
->orWhere('biaya', 'like', '%'.$query.'%')
->get();
}
else
{
$data = Service::table('service')
->orderBy('kodeService', 'asc')
->get();
}
$total_row = $data->count();
if($total_row > 0)
{
foreach($data as $row)
{
$output .= '
<tr>
<td>'.$row->kodeService.'</td>
<td>'.$row->keterangan.'</td>
<td>'.$row->biayaService.'</td>
</tr>
';
}
}
else
{
$output = '
<tr>
<td align="center" colspan="5">No Data Found</td>
</tr>
';
}
$data = array(
'table_data' => $output
);
echo json_encode($data);
}
}
Это скрипт
$(document).ready(function(){
fetch_customer_data();
function fetch_customer_data(query = '')
{
$.ajax({
url:"{{ route('live_search.action') }}",
method:'GET',
data:{query:query},
dataType:'json',
success:function(data)
{
$('#table tbody').html(data.table_data);
}
});
}
$(document).on('keyup', '#search', function(){
var query = $(this).val();
fetch_customer_data(query)
});
});
Маршрут :
Route::resource('service', 'ServiceController');
Route::get('service/search', 'Service@search')->name('live_search.action');
И index.blade
<table class="table table-striped table-hover table-bordered" id="table">
<thead>
<tr>
<th>Kode Service</th>
<th>Keterangan</th>
<th>Biaya</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach($service as $data)
<tr>
<td><?= $data->kodeService?></td>
<td><?= $data->keterangan ?></td>
<td><?= $data->biayaService?></td>
<td>
<a class="btn btn-sm btn-info" href="{{ route('service.edit', $data['kodeService']) }}"> <i class="oi oi-pencil"></i> Edit</a>
<button type="button" class="btn btn-sm btn-danger" data-toggle="modal" data-target="#myModal"><span class="oi oi-trash"></span> Hapus</button>
</td>
</tr>
@endforeach
</tbody>
</table>
Ответ №1:
Поместите свой маршрут следующим образом :
Route::get('service/search', 'ServiceController@search')->name('live_search.action');
Route::resource('service', 'ServiceController');
После этого откройте панель консоли браузера (нажмите F12, чтобы открыть ее) и проверьте запрос Ajax на вкладке Сеть.
Где вы можете получить конкретную ошибку, если таковая имеется, на вкладке ответа.
Комментарии:
1. Если у вас есть живой URL, пожалуйста, поделитесь со мной
2. Также вы передали токен CSRF в запрос или нет?
3. извините, у меня нет живого URL-адреса, и я не знаю токен CSRF горячей передачи в запросе ajax
4. Добавьте следующую строку в заголовке : <meta name=»_token» content=»{{ csrf_token() }}»> И это в нижний колонтитул после загрузки jquery.js <script> //CSRF TOKEN (for Laravel) $.ajaxSetup({ headers: { ‘X-CSRF-TOKEN’: $(‘meta[name=»_token»]’).attr(‘content’) } }); </script>
5. вы добились успеха или нет?
Ответ №2:
Если вам нужен дополнительный маршрут к вашему ресурсному маршруту, вы должны поместить новый маршрут перед ресурсным маршрутом.
Route::get('service/search', 'ServiceController@search')->name('live_search.action');
Route::resource('service', 'ServiceController');