PHP Laravel:自动完成搜索404(未找到)

时间:2016-06-24 17:16:16

标签: javascript php jquery laravel

我正在构建一个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)

有谁能帮我找到解决方案吗?

1 个答案:

答案 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;