jquery使用codeigniter自动完成

jquery使用codeigniter自动完成,jquery,codeigniter,autocomplete,Jquery,Codeigniter,Autocomplete,我将jQuery自动完成与codeigniter框架一起使用 目前,这是100%有效的 我的模型是: function get_sku_code($q){ $this->db->select('ProductCode'); $this->db->like('ProductCode', $q); $query = $this->db->get('ProductList'); if($query->num_rows >

我将jQuery自动完成与codeigniter框架一起使用

目前,这是100%有效的

我的模型是:

  function get_sku_code($q){
    $this->db->select('ProductCode');
    $this->db->like('ProductCode', $q);
    $query = $this->db->get('ProductList');
    if($query->num_rows > 0){
      foreach ($query->result_array() as $row){
        $row_set[] = htmlentities(stripslashes($row['ProductCode'])); //build an array
      }
      $this->output->set_content_type('application/json')->set_output(json_encode($row_set));

    }
  }
我的看法是:

 $("#product").autocomplete( 
 { 
 source: "get_sku_codes", 
 messages: 
 { 
 noResults: '', 
 results: function() {} 
 }, 
 select: function( event, ui ) 
 { 
  var selectedObj = ui.item; 
 $.post('get_sku_prices', {data:selectedObj.value},function(result) { 
 $("#product").parent().parent().find('input[id^="price"]').val(result[0]);
 $("#product").parent().parent().find('input[id^="adjustedprice"]').val(result[0]);
 }); 
 } 
 });
如前所述,这100%有效。我遇到的一个问题是,如果没有数据库匹配,自动完成列表就是空的。当模型没有返回值时,是否有方法返回“数据库中没有匹配项”?我应该使用jquery还是使用codeigniter mysql请求来实现这一点

谢谢你一如既往

控制器-获取sku代码

 function get_sku_codes(){
    $this->load->model('Sales_model');
    if (isset($_GET['term'])){
      $q = strtolower($_GET['term']);
      $this->Sales_model->get_sku_code($q);
    }
  }

首先,根据模式,您不应在模型中重复任何内容。所有这些逻辑必须位于视图将从中获取数据的控制器上

将您的模型更改为:

  function get_sku_code($q){
    $this->db->select('ProductCode');
    $this->db->like('ProductCode', $q);
    $query = $this->db->get('ProductList');
    $row_set = array();
    if($query->num_rows > 0){
      foreach ($query->result_array() as $row){
        $row_set[] = htmlentities(stripslashes($row['ProductCode'])); //build an array
      }
     return $row_set;
  }
以及您的控制器:

  function get_sku_codes(){
    $this->load->model('Sales_model');
    if (isset($_GET['term'])){
      $q = strtolower($_GET['term']);
      $output = $this->Sales_model->get_sku_code($q);
      $this->output->set_content_type('application/json')->set_output(json_encode($output));
    }
  }
然后在视图中,您可以在
下方或旁边的某个位置创建
元素,以在返回结果为空时显示“无匹配项”消息

    $("#product").autocomplete(
 { 
    source: "get_sku_codes", 
    response: function(event, ui) {
        if (ui.content.length === 0) {
            $("#noMatches").html("No matches");
        } else {
            $("#noMatches").empty();
        }
    },
    select: function( event, ui ) 
    { 
        var selectedObj = ui.item; 
         $.post('get_sku_prices', {data:selectedObj.value},function(result) { 
             $("#product").parent().parent().find('input[id^="price"]').val(result[0]);
             $("#product").parent().parent().find('input[id^="adjustedprice"]').val(result[0]);
         }); 
    } 
 });

谢谢@Sport Billy,你是对的,但当我填充此内容时,没有显示任何内容,只是“没有”。你知道为什么吗?谢谢。嗨,体育比利,谢谢你的努力,谢谢。我按照你的建议试过了,但还是一无所获:-(开发者工具XHR根本没有显示HTML响应,所以不确定它是否正确传递。还有其他建议吗?再次感谢。嗨,比利,在我的模型中,这已经是一个问题了。谢谢。然后你有一个输入错误。在你的模型中,你有
get\u sku\u code
,而不是JS中的
get\u sku\u code
。你还期待着一个变量能够
$q
从数据库中获取结果,但使用
jQuery.autocomplete()
时您没有发送任何数据。您说它正在工作,并且正在查看结果(如果有),但我无法理解它是如何工作的。对不起,比利,您是正确的。get\u sku代码是我的模型,我添加了get\u sku代码(控制器)回答这个问题。再次感谢。