【问题标题】:codeigniter jquery autocompletecodeigniter jquery自动完成
【发布时间】:2012-12-27 05:56:54
【问题描述】:

为什么列表没有在我键入时自动更新?无论我输入什么列表都是​​一样的。

我希望能够输入“wj”,它只会列出以“wj”开头的项目。

JS

$(function()
{
    $("#part_num_id").autocomplete({

        source: "partnum/get"

    });
});

控制器

    public function get() 
{

    $q = $this->input->post('term', TRUE);

    $this->load->model('partnum_model');
    $this->partnum_model->get_partnum2($q);
}

型号

  function get_partnum2($q)
  {
    $this->db->select('*');
    $this->db->like('part_num', $q); 
    $query = $this->db->get('item_history');

    if($query->num_rows > 0)
    {
      foreach ($query->result_array() as $row)
      {
        $new_row['label']=htmlentities(stripslashes($row['part_num']));
        $new_row['value']=htmlentities(stripslashes($row['id']));
        $row_set[] = $new_row; //build an array
      }

      echo json_encode($row_set);
    }
  }

【问题讨论】:

  • 您的查询最终会是什么样子?似乎这就是这里的问题。
  • 你试过$this->db->like('part_num', $q);而不是$this->db->like('part_num', $q, 'after');吗?
  • @user1190992 - 是的,谢谢你,谢谢你。这解决了它。但是方式?我从未见过查询中使用过“之后”。
  • before、after、both 和 none 指的是通配符 % 及其在查询中的位置。 mysql 中的 LIKE 需要通配符,否则找不到匹配项,寻找像 bre 这样的词是行不通的,像 bre% 一样。由于您只查找以您键入的字符开头的部件号,因此您只需将通配符放在您发送到查询的字符之后。

标签: jquery-ui codeigniter autocomplete


【解决方案1】:

我可能错了,因为我还没有彻底测试过, 但我相信自动完成发送的是 GET 请求,而不是 POST 请求。 因此

$q = $this->input->post('term', TRUE);

不会给你带来任何东西;相反,你应该写

$q = $this->input->get('term', TRUE);

【讨论】:

  • 两种方式的工作方式相同,无论键入的字母如何,查询都会运行并显示所有内容。
  • 我的错误。如果是这样,您能告诉我们该程序的运行情况吗?通过“多远”,我的意思是:你在 $q 中得到了正确的术语吗? => 您的模型是否调用了所需的 SQL 查询? => SQL 查询的原始结果是您想要的吗? => 您的程序是否将所需的 JSON 返回到您的 javascript?
  • user1190992 找到了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多