【问题标题】:Laravel - AJAX Search works for Input but not SelectLaravel - AJAX 搜索适用于输入但不适用于选择
【发布时间】:2017-08-05 19:50:37
【问题描述】:

我遇到了一个小问题。我正在尝试为我的数据库创建一个过滤器。到目前为止,我想出了这个:

刀片文件:

<input type="text" class="form-control" id="search" name="search" placeholder="Name, NORAD or ID"></input>

<select name="filtername" id="filtername">
    <option value="none"></option>
    <option value="Falcon">Falcon</option>
    <option value="rb">R/B</option>
</select>

Javascript AJAX 调用:

$(document).ready(function() {
$('#search').on('keyup', function() {
    $value = $(this).val();
    delay(function() {
        if ('#search'.length > 3) {
            $.ajax({
                type: 'get',
                url: '{{$launchsitename->site_code}}',
                data: {
                    'search': $value
                },
                success: function(data) {
                    $('#launchsatdisplay').html(data);
                }
            });
        }
    }, 300);
});

$("#filtername").change(function() {
    var filtername = $(this).val();
    var dataString = "filtername=" + filtername;
    $.ajax({
        type: "get",
        url: "{{$launchsitename->site_code}}",
        data: {
            'search': dataString
        },
        success: function(data) {
            $('#launchsatdisplay').html(data);
        }
    });
});
});

控制器:

if ($request->ajax())
    {
        $output="";
        $launchsitesatellite = DB::table('satellites')
            ->where(function($q) use ($request) {
                $q->orWhere('satname','LIKE','%'.$request->search.'%')
                  ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')
                  ->orWhere('object_id','LIKE','%'.$request->search.'%');
            })
            ->where('site', $site_code)->get();
        if ($launchsitesatellite)
        {
            $output .='<tr>'.
            '<th>'.'Satellite Name'.'</th>'.
            '<th>'.'NORAD ID'.'</th>'.
            '<th>'.'Object Type'.'</th>'.
            '<th>'.'Launch Date'.'</th>'.
            '<th>'.'Country'.'</th>'.
            '<th>'.'Object ID'.'</th>'.
            '<tr>';
            foreach ($launchsitesatellite as $key => $launchsitesatellites) {
            $output .='<tr>'.
                    '<td>'.$launchsitesatellites->satname.'</td>'.
                    '<td>'.$launchsitesatellites->norad_cat_id.'</td>'.
                    '<td>'.$launchsitesatellites->object_type.'</td>'.
                    '<td>'.$launchsitesatellites->launch.'</td>'.
                    '<td>'.$launchsitesatellites->country.'</td>'.
                    '<td>'.$launchsitesatellites->object_id.'</td>'.
                    '</tr>';
            }
        }
        return $output;
    }
    else {
        $launchsitesatellite = DB::table('satellites')->where('site', $site_code)->Paginate(40);
        return view('pages/launchsite-filter', compact('launchsites', 'launchsitesatellite'));
    }

此代码用于对我的控制器进行 AJAX 调用并从数据库中获取结果。上面发布的代码非常适合input。我可以轻松地搜索数据库。唯一的问题是select。每当我选择一个选项时,它都不会返回任何结果。我猜我在控制器中编写 select 的方式有问题,因为我认为 Javascript 不会导致问题。

select 应该读取我的数据库中名为 satellitessatname 列并返回过滤结果。

是否有人能够解释为什么select 不起作用或我的代码中的错误在哪里?

【问题讨论】:

  • 'search': dataString。你觉得这是什么?
  • $request-&gt;filterfalcon?这是什么?
  • @u_mulder 抱歉 - 这是我试图让它工作的尝试。我现在已经删除了。
  • 我再说一遍 - 'search': dataString 是什么?
  • 那么你是否明白$request-&gt;search 的价值是filtername=rb,例如。你真的希望通过这个“词”进行搜索吗?

标签: javascript php jquery ajax laravel


【解决方案1】:

如下修改选择框的ajax调用代码

$("#filtername").change(function() {

    var dataString = $(this).val();
    $.ajax({
        type: "get",
        url: "{{$launchsitename->site_code}}",
        data: {
            'search': dataString
        },
        success: function(data) {
            $('#launchsatdisplay').html(data);
        }
    });
});

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2015-07-07
    • 2018-08-06
    • 2013-09-30
    • 2019-03-08
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多