【问题标题】:Auto Complete with Laravel 5.2使用 Laravel 5.2 自动完成
【发布时间】:2016-05-16 21:11:09
【问题描述】:

我的网站已经有一个功能搜索框,但我想为我的搜索栏实现自动完成功能。我知道有很多插件,比如 typeahead 等等。我想实现 typeahead 或 jQuery Autocomplete widget,如果你们知道的话。我看过一些教程,但它们不适用于我拥有的代码。我将向您展示我的搜索框的刀片、控制器和路由。

如何将数据库中的所有数据加载到 jQuery 插件的源字段中?例如,我想加载传单标题?

show.blade.php:

@extends('home')

@section('content')
        <div id="the-basics">
            <input class="typeahead" type="text" placeholder="Title">
        </div>
@stop

@section('scripts.footer')
    <script type="application/javascript" src="{{ URL::asset('/src/public/js/typeahead.js') }}"></script>
    <script>
        $('#the-basics .typeahead').typeahead({
                    hint: true,
                    highlight: true,
                    minLength: 1
                },
                {
                    name: 'title',
                    source: 'travelflyers/search'
                });

    </script>

@stop

TravelFlyersController.php:

class TravelFlyersController extends Controller {

    // Other functions here...

     public function search() {
       $keyword = Input::get('keyword');
       $flyers = Flyer::where('title', 'LIKE', '%' .$keyword. '%')->get(); 
       return \Response::json($flyers);
     }


}

路线:

Route::group(['middleware' => ['web']], function () {

    /** Resource Route For Travel Flyers */
    Route::resource('travelflyers', 'TravelFlyersController');


    Route::post('travelflyers/search',[
        'uses' => '\App\Http\Controllers\TravelFlyersController@search',
        'as'   => 'travelflyers.search',
    ]);


});

【问题讨论】:

    标签: php jquery typeahead laravel-5.2


    【解决方案1】:

    如果您使用 typehead 为什么要添加表单和提交按钮,您必须只放置带有 id 的文本框。当您键入一些单词 ajax 时,typehead 作为 ajax 工作 向您的控制器请求并获得结果

    <div id="the-basics">
      <input class="typeahead" type="text" placeholder="Title">
    </div>
    
        <script>
        $('#the-basics .typeahead').typeahead({
          hint: true,
          highlight: true,
          minLength: 1
        },
        {
          name: 'states',
          source: 'travelflyers/search'
        });
    
        </script>
    

    并确保您的控制器返回 JSON 数据不返回视图它应该是 json 数据在您的控制器中使用 var_dump 并从浏览器开发工具中检查它是否是 json

    【讨论】:

    • 在这里我更新了我的视图和控制器,仍然没有显示自动完成
    • 请检查您的 typehead.js 链接是否正确(从检查元素检查并单击链接),然后在您输入字母时检查网络选项卡(在 Chrome 控制台中) ajax 请求是否有效,然后在你的控制器里放 dd(input:all());先检查这些东西
    【解决方案2】:

    在 jquery 的自动完成方法中,使用 Ajax 调用以通过控制器从数据库中获取数据。如果对 Ajax 不熟悉,就得花点时间学习。这里有一个粗略的例子来指导你如何工作。

    searchUrl ='http://www.yourwebsite.com/travelflyers/search'
     $( "#autocomplete" ).autocomplete({
        $.ajax({url: searchUrl, success: function(flyers){
        source: flyers;
     });
    

    Another example here

    这不是确切的例子,但我希望你能明白。

    【讨论】:

      【解决方案3】:

      更改您的路线以获取方法并传递查询变量

      Route::get('travelflyers/search/{query}',[
          'uses' => '\App\Http\Controllers\TravelFlyersController@search',
          'as'   => 'travelflyers.search',
      ]);
      

      在你看来

      <script src="https://twitter.github.io/typeahead.js/js/jquery-1.10.2.min.js"></script>
      <script src="https://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script>
      
      <div id="remote">
        <input class="typeahead" type="text" placeholder="Search Travel Flyers Here">
      </div>
          <script>
          var bestPictures = new Bloodhound({
            datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title'),
            queryTokenizer: Bloodhound.tokenizers.whitespace,
            remote: {
              url: '/travelflyers/search/%QUERY',
              wildcard: '%QUERY'
            }
          });
      
          $('#remote .typeahead').typeahead(null, {
            name: 'best-pictures',
            display: 'title',
            source: bestPictures
          });
      
          </script>
      

      在你的控制器中

      public function search($query) {        
          $flyers = Flyer::select('title')->where('title', 'LIKE', '%' .$query. '%')->get();
          return $flyers;
      }
      

      它还没有样式,因为我只是从官方文档中复制和粘贴,我已经尝试过该代码并且它可以工作..

      【讨论】:

      • 预输入工作正常,但是当我点击输入时它不显示或执行任何操作
      • 你想做什么?重定向以打开该传单?或在当前视图中显示它?如果你想在当前视图中显示你可以给我看你的完整刀片吗?
      • 好吧,我目前拥有的是,当用户搜索传单时,它会将他们带到 search.php,其中包含具有该搜索关键字的所有传单的列表
      【解决方案4】:

      在您的 Routes 文件中试试这个,使用 GET 而不是 POST

      Route::get('travelflyers/search',[
          'uses' => '\App\Http\Controllers\TravelFlyersController@search',
          'as'   => 'travelflyers.search',
      ]);
      

      【讨论】:

      • 我的搜索框没有问题,我只是寻求帮助以实现我的搜索框的自动完成。
      • 你把那段打字机代码放在你的视图里了吗?
      • 是的,我做到了。有没有办法可以为我的搜索框使用 typeahead 或其他 jQuery 自动完成插件?
      猜你喜欢
      • 2017-03-06
      • 1970-01-01
      • 2019-04-01
      • 2016-11-14
      • 2017-05-15
      • 2018-06-12
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      相关资源
      最近更新 更多