#javascript #php #ajax #laravel
#javascript #php #ajax #laravel
Вопрос:
итак, у меня есть таблица с 2 столбцами, и я получил функцию поиска из учебника, но она не работает в таблице, которую я создал. функция поиска работает в режиме реального времени, как только пользователь начинает вводить данные, она отображает похожие результаты, пока входные данные не совпадут с точными данными. это сработало, когда я скопировал точно из учебника, но не смог заставить его работать для моей таблицы, пожалуйста, помогите
вот как выглядит моя таблица, внутри post/index.blade.php
которой расширяется layouts.app
, содержащая скрипты
<table class="..." id="table">
<thead>
<tr>
<th>No.</th>
<th>Student ID</th>
<th>Student Name</th>
<th>
<a href="#" class="create-modal btn btn-success btn-sm">
<i class="glyphicon glyphicon-plus"></i>
</a>
</th>
</tr>
</thead>
<tbody>
{{ csrf_field() }}
<?php $no=1; ?>
@foreach ($post as $value)
<tr class="post{{$value->id}}">
<td>{{ $no }}</td>
<td>{{ $value->student_id }}</td>
<td>{{ $value->student_name }}</td>
<td>
<a class="show-modal btn btn-info btn-sm"
data-id="{{$value->id}}"
data-student_id="{{$value->student_id}}"
data-student_name="{{$value->student_name}}"
>
<i class="fa fa-eye"></i>
</a>
<a class="edit-modal btn btn-warning btn-sm"
data-id="{{$value->id}}"
data-student_id="{{$value->student_id}}"
data-student_name="{{$value->student_name}}"
>
<i class="glyphicon glyphicon-pencil"></i>
</a>
<a class="delete-modal btn btn-danger btn-sm"
data-id="{{$value->id}}"
data-student_id="{{$value->student_id}}"
data-student_name="{{$value->student_name}}"
>
<i class="glyphicon glyphicon-trash"></i>
</a>
</td>
</tr>
</tbody>
@endforeach
</table>
и действие поиска внутри контроллера
function action(Request $request)
{
if($request->ajax())
{
$output = '';
$query = $request->get('query');
if($query != '')
{
$data = DB::table('posts')
->where('student_id', 'like', '%'.$query.'%')
->orWhere('student_name', 'like', '%'.$query.'%')
->orderBy('student_id', 'desc')
->get();
}
else
{
$data = DB::table('posts')
->orderBy('student_id', 'desc')
->get();
}
$total_row = $data->count();
if($total_row > 0)
{
foreach($data as $row)
{
$output .= '
<tr>
<td>'.$row->student_id.'</td>
<td>'.$row->student_name.'</td>
</tr>
';
}
}
else
{
$output = '
<tr>
<td align="center" colspan="5">No Data Found</td>
</tr>
';
}
$data = array(
'table_data' => $output,
'total_data' => $total_row
);
echo json_encode($data);
}
}
}
и это скрипт внутри layouts/app.blade.php
, чтобы сделать функцию поиска
// search function
$(document).ready(function(){
fetch_customer_data();
function fetch_customer_data(query = '')
{
$.ajax({
url:"{{ route('post.action') }}",
method:'GET',
data:{query:query},
dataType:'json',
success:function(data)
{
$('tbody').html(data.table_data);
$('#total_records').text(data.total_data);
}
})
}
$(document).on('keyup', '#search', function(){
var query = $(this).val();
fetch_customer_data(query);
});
});
и я добавил маршрут для поиска внутри группы маршрутов
Route::group(['middleware' => ['web']], function() {
Route::resource('post','PostController');
Route::get('post/action', 'PostController@action')->name('post.action');
});
и вот как выглядит индекс внутри контроллера
class PostController extends Controller
{
public function index(){
$post = Post::paginate(4);
return view('post.index',compact('post'));
}
мой URL выглядит так sms.test/post
Комментарии:
1. почему не Datatable?
2. да, это база данных. все данные хранятся в базе данных @MasudulHasanShawon
3. вы проверяли содержимое
data
? что это возвращает?4. @Swati если вы имеете в виду это
$data = DB::table('posts')
в контроллере, я предполагаю, что он возвращает содержимое таблицыposts
, но я не уверен, что это действительно так, и я не знаю, как проверить, так это или нет:(
Ответ №1:
после половины дня проб и ошибок мой маршрут был неправильным
Route::group(['middleware' => ['web']], function() {
Route::resource('post','PostController');
Route::get('post/action', 'PostController@action')->name('post.action');
});
Я перешел post/
от этого Route::get('post/action', 'PostController@action')->name('post.action');
итак, теперь это выглядит так Route::get('action', 'PostController@action')->name('post.action');
Я не понимаю, почему, но сейчас это работает, лол