我一直在尝试为网页创建实时搜索输入,以在我的数据库中搜索数据。到目前为止,我想出了这个:
Controller :
public function launchsitefilter($site_code, Request $request) {
$launchsites = DB::table('launchsites')->where('site_code', $site_code)->get();
if(! $launchsites){
return abort(404);
}
$launchsitesatellite = DB::table('satellites')->where('site', $site_code)->get();
if ($request->ajax())
{
$output="";
$launchsitesatellite = DB::table('satellites')->where('satname','LIKE','%'.$request->search.'%')
->orWhere('norad_cat_id','LIKE','%'.$request->search.'%');
if ($launchsitesatellite)
{
foreach ($launchsitesatellite as $key => $launchsitesatellites) {
$output ='<tr>'.
'<td>'. $launchsitesatellites->satname .'</td>'.
'<td>'.$launchsitesatellites->norad_cat_id.'</td>'.
'<td>'.$launchsitesatellites->object_type.'</td>'.
'</tr>';
}
}
}
return view('pages/launchsite-filter', compact('launchsites', 'launchsitesatellite'));
}
脚本:
$('#search').on('keyup', function() {
$value=$(this).val();
$.ajax({
type : 'get',
url : '{{$launchsitename->site_code}}',
data : {'search':$value},
success:function(data) {
console.log(data);
}
});
});
Blade :
<input type="text" class="form-control" id="search" name="search"></input>
当我在输入中输入内容时,我在控制台中收到此错误:
GET http://space-observe.dev/launch-site/JSC?search=search term 500 (Internal Server Error)
我猜测 Javascript 正在运行,但我的 Controller 出现错误。您需要做什么才能使实时搜索起作用并显示结果。
最佳答案
如果您像下面这样重写代码,它应该可以工作:
public function launchsitefilter($site_code, Request $request) {
$launchsites = DB::table('launchsites')->where('site_code', $site_code)->get();
if(! $launchsites){
return abort(404);
}
if ($request->ajax())
{
$output="";
// This is the ->get() I'm referring to in the comments.
$launchsitesatellite = DB::table('satellites')->where('satname','LIKE','%'.$request->search.'%')
->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')->get();
if ($launchsitesatellite)
{
foreach ($launchsitesatellite as $key => $launchsitesatellites) {
$output .='<tr>'.
'<td>'. $launchsitesatellites->satname .'</td>'.
'<td>'.$launchsitesatellites->norad_cat_id.'</td>'.
'<td>'.$launchsitesatellites->object_type.'</td>'.
'</tr>';
}
}
return $output;
}
else {
$launchsitesatellite = DB::table('satellites')->where('site', $site_code)->get();
return view('pages/launchsite-filter', compact('launchsites', 'launchsitesatellite'));
}
}
请注意,该功能分为两部分,紧接在检查站点是否包含启动站点之后。
两个部分都返回自己的响应,ajax 部分返回一个 HTML 响应,普通部分返回一个 View 。
另请注意我添加的 ->get()
应该可以解决您的代码存在的问题。
最后,当您想将所有行添加到 $output
时,您忘记了一个点 (.
),它只会显示最后的结果。
关于javascript - Laravel jQuery AJAX 实时搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45436383/