jQuery+php通过关键字搜索并以列表形式显示

 HTML代码:
<div class="form-group">
        <label for="c-stuSearch" class="control-label col-xs-12 col-sm-2">{:__('视频名称')}:</label>
        <div class="col-xs-12 col-sm-8">
        <input data-rule="required"  type="text" class="form-control" id="stuSearch" name="row[stuSearch]"  value="" placeholder="输入您想检索的关键词..."/>
        <ul id="autoBox">
        </ul>
        </div>
    </div>

Jquery代码: 
<style type="text/css">
    #autoBox
    {
      margin: 0px;
      padding: 0px;
      border: 1px solid #CCCCCC;
      width: 200px;
    }
    #autoBox li
    {
      clear: both;
      background-color: white;
      color: black;
      position: relative;
      top: 0px;
      left: 0px;
      line-height: 35px;
      width:200px;
      text-align: left;
      overflow: hidden;
    }
    #autoBox li:hover
    {
      background-color: gray;
      color: yellow;
      cursor: pointer;
    }
  </style>
<script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
  $(function(){
      $.ajaxSetup({cache:false}) ; //不缓存
      //以下代码用于显示检索提示框
      $("#autoBox").hide(); //初始化时隐藏补全提示框
      $("#stuSearch").keyup(function(){ //输入框中的keyup事件激活以下查询行为
      $("#autoBox").html(""); //先清空补全提示框原有内容
      if($("#stuSearch").val().length>0) // 如果输入框不为空
      {
        $.ajax({ //后台调用php文件进行查询
          type:"post",
          url:"weike/video/getSearchKeywords",
          dataType:"json",
          data:{keywords:$("#stuSearch").val()},
          success:function(feedbackdata)
          {
          //console.log(feedbackdata);
              $("#autoBox").show();// 显示补全提示框
              // 循环二维数组,将数据追加到<ul>中
              for(i=0;i<feedbackdata.length;i++) 
              {
                 $("#autoBox").append("<li style='margin-bottom: 20px;'>"+feedbackdata[i]['title'].substr(0,40)+"<span style='display:none;'>"+"#"+feedbackdata[i]['hash']+"</span>"+"</li>");
              }

              //为这些新增的li绑定单击事件,单击后将其值赋到输入框中
              $("#autoBox li").on("click",function(){ 
                 $("#stuSearch").val($(this).text());
              });

              $("#autoBox").append("<li style='text-align:right;color: red;'>关闭</li>");//在提示框的最后添加一个li用来关闭
              /*添加单击事件,单击后隐藏提示框*/
              $("#autoBox li:last").on("click",function(){ 
                $("#autoBox").hide();
              });
            }
        });
      }
    })
  })
</script>

PHP代码【该方法是通过 关键字对数组(缓存文件进行)模糊查询,并非是直接通过关键字查询数据库获取数据】:
/**
     * 通过关键字获取数据【试题】
     */
    public function getSearchKeywords(){
        $keyword = $this->request->post('keywords');
        $videoList = $this->getVideoQiniuCache($keyword);
        exit(json_encode($videoList));
    }

 /**
     * 获取缓存中的七牛云数据,并通过关键字对数组模糊查询
     * @param  string  $keyword 关键字
     * @return array   return $questions 通过关键字匹配的试题数据
     */
    public function getVideoQiniuCache($keyword){
    
        // 取出缓存,过期或不存在返回false
        $video_qiniu = cache('admin_video_qiniu');
        if (!$video_qiniu) {
            $cacheConfig = config('cache');
            $video_qiniu = db('video_qiniu')->field('id,title,hash')->order('id desc')->select();
            // 设置缓存数据
            cache('admin_video_qiniu',$video_qiniu);
        }
        // 对数组进行模糊查询
        $arr=$result=array();
        foreach ($video_qiniu as $key => $value) {
    
            foreach ($value as $valu) {
                if(strstr($valu, $keyword) !== false)
                {
                    array_push($arr, $key);
                }
            }
        }
        foreach ($arr as $key => $value) {
            if(array_key_exists($value,$video_qiniu)){
                array_push($result, $video_qiniu[$value]);
            }
        }
        return $result;
    }  

猜你喜欢

转载自blog.csdn.net/a898712940/article/details/78417854