未捕获的TypeError:无法读取未定义的JQUERY自动完成的属性'length'

rjc*_*ode 2 javascript jquery json autocomplete

使用此脚本, https://www.devbridge.com/sourcery/components/jquery-autocomplete/

我正在使用jQuery Autocomplete从我的数据库中搜索用户。

下面是返回Json的控制器:

public function searchusers1() {
    if ($_GET) {
        $query = $this -> input -> get('query');

        $searcharray = $this -> model_usermanage -> searchuser($query);

        $a_json = array();
        $a_json_row = array();
        foreach($searcharray as $row) {
            //$user_firstname = htmlentities(stripslashes($row['user_firstname']));
            //$user_lastname = htmlentities(stripslashes($row['user_lastname']));
            $user_email = htmlentities(stripslashes($row['user_email']));
            //$a_json_row["user_firstname"] = $user_firstname;
            $a_json_row["user_email"] = $user_email;

            array_push($a_json, $a_json_row);
        }
        echo json_encode($a_json);
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是我的jQuery:

$('#reply_bcc').autocomplete({
    serviceUrl: '<?php echo base_url(); ?>index.php/hi/test/searchusers1',
    minChars: 3,
    onSelect: function (suggestion) {
        console.log('You selected: ' + suggestion.data + ', ' + suggestion.data);
    }
});
Run Code Online (Sandbox Code Playgroud)

这是我的JSON响应:

[{"user_email":"hi@test.com"},{"user_email":"hello@au.com"},{"user_email":"testing@123.com"},]
Run Code Online (Sandbox Code Playgroud)

我的HTML:

<div class="col-md-10">
    <input type="text" name="reply_bcc" id="reply_bcc" autocomplete="off" class="form-control">
</div>
Run Code Online (Sandbox Code Playgroud)

我的问题是:

我在控制台中遇到以下错误,并且无法在html输入中看到此搜索值作为下拉列表:

未捕获的TypeError:无法读取未定义的属性“ length”

这是怎么了?

谢谢!

Geo*_*rez 5

文档说明“来自服务器的响应必须采用JavaScript对象之后的JSON格式:”

{
    // Query is not required as of version 1.2.5
    "query": "Unit",
    "suggestions": [
        { "value": "United Arab Emirates", "data": "AE" },
        { "value": "United Kingdom",       "data": "UK" },
        { "value": "United States",        "data": "US" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

而且您只是返回一个没有格式值/数据的数组。您可以在PHP中更改格式,也可以使用“ transformResult”函数在数组中创建建议属性。

您应该在PHP代码中添加一个对象:

$obj = new stdClass();
$obj->suggestions = $a_json;
echo json_encode($obj);
Run Code Online (Sandbox Code Playgroud)