【问题标题】:Laravel Ajax search gives the whole collection as response to the query after input is cleared from input box在从输入框中清除输入后,Laravel Ajax 搜索将整个集合作为对查询的响应
【发布时间】:2020-11-27 04:05:31
【问题描述】:

当我清除搜索功能的输入字段时,响应应该不会显示任何结果,而是提供完整的集合。有输入时它工作正常,但一旦我清除它,整个集合就会显示出来。这是 Laravel 控制器类。

 public function search(Request $request)
    {  if($request->ajax()){

        $results = DB::table('PROPERTY_TAGS')->where('TAG_NAME','LIKE','%'.$request->search."%")->get();
        $output='';
        if(count($results)>0){
            foreach($results as $result){
                $output.='<p>'.$result->TAG_NAME.'</p>';
            }

        }else{
            $output="<p>no data found</p>'";

        }
         return $output;
     }
}

这是我的带有 laravel 刀片模板的 HTML:

<div class="row">
      <div class="col s9 "> <input type="text" id="search" name="search" placeholder="Search" /></div>
      <div class="col s3"><a href="sass.html"><i class="material-icons">search</i></a></div>
      <div class="col s12">
            <b>Ex: </b><i>Beltola, Zoo Road</i>

            <!-- Suggestions will be displayed in below div. -->
            <div id="display"></div>
     </div>
</div>

这是脚本:

<script type="text/javascript">

$.ajaxSetup({
headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

$('#search').on('keyup',function(){
    $value=$(this).val();
    $.ajax({
        type : 'GET',
        url : '/search',
        data:{'search':$value},
        success:function(data){
            if(data == '\0'){
                $('#display').text('');
            }
               $('#display').html(data).show();
               //alert(data.success);
                }
    });
});

</script>

【问题讨论】:

  • 如果有空字符串,是否跳过 Ajax 调用? If ($value.length === 0) return;?
  • Naah mate 现在 ajax 函数完全停止了。没用
  • “停止”对我来说意义不大。请参阅下面的答案。

标签: php html ajax laravel


【解决方案1】:

如果字符串为空,则不需要发出 Xhr 请求。可以添加一点检查,如下所示。

$('#search').on('keyup',function() {
  var value = $(this).val();

  //ADD THIS... ++
  if (value.length === 0) {
    //clear results
    $('#display').text('');
    //no query, just return.
    return;
  }
  //++

  $.ajax({
    type : 'GET',
    url : '/search',
    data:{'search': value},
    success:function(data) {
      if (data == '\0') {
        $('#display').text('');
      }
      $('#display').html(data).show();
      //alert(data.success);
    }
  });
});

【讨论】:

  • 非常感谢。取消 ajax 的事件有效。但是,我想知道为什么 like 运算符为空值提供整个集合
  • 很高兴成功了!我认为不是空值而是空字符串,所以这是一个通配符搜索返回所有内容:'LIKE','%'.$request-&gt;search."%"。您也可以在 PHP 控制器端处理它,但首先不发出 Xhr 请求更有意义。甚至可能要等到输入 3 个字母后再进行搜索,具体取决于您要搜索的内容。
猜你喜欢
  • 2019-06-10
  • 2016-07-25
  • 2021-11-21
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多