javascript - Laravel jQuery AJAX 实时搜索

标签 javascript php jquery ajax laravel

我一直在尝试为网页创建实时搜索输入,以在我的数据库中搜索数据。到目前为止,我想出了这个:

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/

相关文章:

javascript - 并排水平输入范围和垂直输入范围

php - 如何使用 Laravel 在控制台图表中传递值

php - Composer 更新给出错误说插件无法初始化,找不到每个包的类

php - Codeigniter 回调函数不工作

c# - 在更改第一个 ddl 时使用 jquery ajax 绑定(bind)下拉列表

javascript - 在 asp.net 中调用 javascript/jquery 函数

javascript - 如何向另一个页面发送消息

php - 如何为 2 个用户代理加载自定义样式表?

javascript - 如何推迟子指令的编译阶段,直到父指令的范围具有所需的所有数据

javascript - 切换嵌套列表中的链接不可单击