codeigniter中的jquery自动完成功能无法正常工作

时间:2014-12-09 19:18:50

标签: php jquery codeigniter

当我搜索它时,如果我在db中写了lastname或firstname,那么就不会给我带来好结果。空的msg也不行。由于
这是我的控制者:

class Search extends CI_Controller{
  function index(){
    $this->load->view('search_view');
  }

  function search_users(){
    $this->load->model('search_model');
    if (isset($_GET['term'])){
      $q = strtolower($_GET['term']);
      $this->search_model->search($q);
    }
  }
}

这是型号:

class Search_model extends CI_Model{
      function search($q){
        $this->db->select('*');
        $this->db->like('CONCAT(user_profiles.firstn, " ", user_profiles.lastn)', $q);
        $query = $this->db->get('user_profiles');
        $query = $this->db->get('user_profiles');
    $row_set = array();
    $temp = array();

    if($query->num_rows > 0){
        foreach ($query->result_array() as $row){
            $temp['id'] = $row['id'];
            $temp['label'] = $row['firstn'].' '.$row['lastn'];
            $row_set[] = $temp; 
        }
          echo json_encode($row_set);
        }
      }
    }

这是我的观点:

<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<style type="text/css">
#empty-message { float: left; }
input { float: left }
</style>



<input type="text" id="search" />

<script>

$(function(){
    $('#search').autocomplete({
        source: "search/search_users",
        minLength:0,

        response: function(event, ui) {
            if (ui.content.length === 0) {
                $("#empty-message").text("No results found");
            }
            else {
                $("#empty-message").empty();
            }
        }

    });


});
</script>

如果我使用$ this-&gt; db-&gt; last_query()并在标签中加上'a',它会给我这个查询:

SELECT *
FROM (`user_profiles`)
WHERE  CONCAT(user_profiles.meno, " ", user_profiles.priezvisko)  LIKE '%a%'

这就是结果:

[{"id":"5","label":"Janosik icloud"},{"id":"7","label":"Janosik iicloud"},{"id":"8","label":"Janosik Smrdi"}]

但如果我把其他字母写成空白页面没有最后查询没有结果
这是我的表
id - user_id - role - firstn - lastn - birthd - city avatar - profil_pic
1 - 1 - 管理员 - Aykon - 艾科诺夫 - 1990-06-09 - Zilina - 空值 - 空 -

5 - 6 - 用户 - Janosik - icloud - 1999-05-06 - Zilina - 空值 - 空 -

6 - 7 - 用户 - Aykon - 外表 - 1800-06-08 - 空值 - 空值 - 空 -

7 - 8 - 用户 - Janosik - iicloud - 1000-08-09 - 空值 - 空值 - 空 -

8 - 9 - 用户 - Janosik - Smrdi - 0000-00-00 - 空值 - 空值 - 空 -

2 个答案:

答案 0 :(得分:0)

  • 在控制器方法的开头打印变量$q
  • 在模型方法
  • 之前打印变量$q
  • 打印查询运行以检查您的$q是否正确发送给您的模型。

Doc Codeigniter - last_query()

答案 1 :(得分:0)

我希望这会对你有所帮助 在控制器

function search($q)
{
    $this->db->select('firstn,lastn');
    $this->db->like('CONCAT(user_profiles.firstn, " ", user_profiles.lastn)', $q);
    $query = $this->db->get('user_profiles');
    $row_set = array();
    $temp = array();
    if($query->num_rows > 0)
    {
        foreach ($query->result_array() as $row)
        {
            // give your id
            $temp['id'] = $row['id']; 
            // give your label
            $temp['label'] = $row['label']; 
            $row_set[] = $temp;
        }
    }
     echo json_encode($row_set);
     die;
}

在视图中

<script>

$(function(){
    $('#search').autocomplete({
        source: "search/search_users",
        minLength:0,
        response: function(event, ui) {
            var c = ui.content.length;
            check_data(c);
        }

    });
});

function check_data(data)
{
    if(data === 0)
    {
          $("#empty-message").text('No results found');
    }
    else
    {
        $("#empty-message").text( '' );
    }
}
</script>