在Codeigniter中正确返回jquery自动完成的响应

时间:2014-01-23 07:54:31

标签: php jquery codeigniter autocomplete

我是jquery的新手,我遇到了自动完成功能的问题。编辑:我应该提到我正在使用带有Codeigniter的MVC。我的AJAX响应像这样[{"customer_name":"Adecco Management & Consulting S.A."}]返回。它也不是连续的下拉列表中的每个字符都像这样

[
{
"
c
u
s
t

等等。这是我的自动完成脚本。

$('#cust_name').autocomplete({
    source: function(request,response){
        var request = {
            toSearch: $('#cust_name').val()
        };
        $.ajax({
            url: '/researchDB/index.php/rdb_con/autoComplete',
            data: request,
            datatype:"json",
            type: 'POST',
            success: function(data){
                response(data);
            }
        });
    }
});

和我的控制员:

function autoComplete(){
    $data['id'] = $this->rdb_mod->autoComplete();
    echo json_encode($data['id']);
}

模型:

public function autoComplete(){
        $toSearch = $_POST['toSearch'];
        $this->db->select('customer_name');
        $this->db->like('customer_name', $toSearch,  'after');
        $query = $this->db->get('research');
        return $query->result();
    }

在视图中输入:

<input data-input-type="cust_name" id="cust_name" class="ids form-control search-query " type="text"  name="customer_name">

我不确定我是否正确设置了jquery函数,但是当我输入输入时,响应包含了错误格式的所需结果。感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

我在SO之外收到了答案,并希望将此解决方案发布给其他人。

controller:我需要将结果放入一个数组中,并将其作为一个对象传递给ajax响应。

function autoComplete(){
        $data['id'] = $this->rdb_mod->autoComplete();
        $results = array();
        foreach($data['id'] as $row){
            $results[]=$row->customer_name;
        }
        echo json_encode($results);
}

jquery:据我所知,我没有使用内置函数,因此覆盖了自动完成设置的请求变量。

$('#cust_name').autocomplete({
        source: function(request,response){
           $.ajax({
                url: '/researchDB/index.php/rdb_con/autoComplete',
                data: request,
                datatype:"json",
                type: 'POST',
                success: function(data){
                    var items = JSON.parse(data);
                    response(items);
                }
            });
    }
    });

模特:变化不大。我添加了不同的限制重复值。

public function autoComplete(){
        $toSearch = $_POST['term'];
        $this->db->distinct();
        $this->db->select('customer_name');
        $this->db->like('customer_name', $toSearch, 'after');
        $query = $this->db->get('research');
        return $query->result();
    }

感谢所有帮助过我的人!