我正在构建一个laravel应用程序,我必须在我的应用程序中使用自动完成搜索。
我的路线:
Route::get('/autocomplete',[
'uses'=>'CourseController@autocomplete',
'as'=>'autocomplete'
]);
我的控制器:
public function autocomplete(Request $request)
{
$item = $request->input(['searchname']);
$results=array();
$queries = DB::table('courses')
->where('name', 'LIKE', '%'.$term.'%')
->take(5)->get();
foreach ($queries as $data) {
$results[]=['id'=>$data->id,'value'=>$data->name];
}
return Response::json($results);
}
我的观看页面:
{{ Form::open(['action' => ['UserController@autocomplete'], 'method' => 'GET']) }}
{{ Form::text('searchname', '', ['id' => 'searchname', 'placeholder' => 'Enter name'])}}
{{ Form::submit('Search', array('class' => 'button expand')) }}
{{ Form::close() }}
<script type="text/javascript">
jQuery(document).ready(function($) {
$('#searchname').autocomplete({
source: "/autocomplete" ,
minlength:1,
autofocus:true,
select:function(event,ui){
$("searchname").val(ui.item.value);
}
});
});
</script>
因此,当我搜索某个项目而不是获取项目名称时,我的控制台中出现以下错误:
GET http://localhost/autocomplete?term=tree 404 (Not Found)
有谁能帮我找到解决方案吗?
答案 0 :(得分:1)
自动填充的source
是问题所在。您正在传递相对于服务器文档根目录的路径,而不是站点内的路径。
此外,您不需要表单,因为搜索是异步完成的。
你可以试试这个
<input type="text" id="searchname" placeholder="Enter name"/>
和
<script type="text/javascript">
jQuery(document).ready(function($) {
$('#searchname').autocomplete({
source: "{{ route('autocomplete') }}" ,
minlength:1,
autofocus:true,
select:function(event,ui){
$("searchname").val(ui.item.value);
}
});
});
</script>
编辑:我假设您网站的根位于http://localhost/your-site
,而不仅仅是localhost
。
此外,在您的路线中,您使用CourseController
,然后在您编写UserController
的表单中。由于您无论如何都在命名路由,因此最好使用route
帮助程序生成正确的URL。
最后,在您的控制器中,您应该输入名称“term”,而不是“searchname”。
$term = $request->term;