Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获类型错误:无法读取属性';长度';未定义JQUERY的自动完成_Javascript_Jquery_Json_Autocomplete - Fatal编程技术网

Javascript 未捕获类型错误:无法读取属性';长度';未定义JQUERY的自动完成

Javascript 未捕获类型错误:无法读取属性';长度';未定义JQUERY的自动完成,javascript,jquery,json,autocomplete,Javascript,Jquery,Json,Autocomplete,使用此脚本, 我正在使用jqueryautocomplete从我的数据库中搜索用户 下面是返回Json的控制器: public function searchusers1() { if ($_GET) { $query = $this -> input -> get('query'); $searcharray = $this -> model_usermanage -> searchuser($query);

使用此脚本,

我正在使用jqueryautocomplete从我的数据库中搜索用户

下面是返回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);
    }
}
下面是我的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);
    }
});
我的HTML:

<div class="col-md-10">
    <input type="text" name="reply_bcc" id="reply_bcc" autocomplete="off" class="form-control">
</div>

我的问题是:

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

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

这怎么了


谢谢

文档解释了“来自服务器的响应必须是JSON格式的JavaScript对象:”

{
//从版本1.2.5起,不需要查询
“查询”:“单位”,
“建议”:[
{“值”:“阿拉伯联合酋长国”,“数据”:“AE”},
{“值”:“联合王国”,“数据”:“联合王国”},
{“价值”:“美国”,“数据”:“美国”}
]
}
您只是返回一个没有格式值/数据的数组。您可以在PHP中更改格式,也可以使用“transformResult”函数使用数组创建suggestions属性

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

$obj = new stdClass();
$obj->suggestions = $a_json;
echo json_encode($obj);

您不需要调用stdClass()。函数json_encode()为您将关联数组转换为json。下面是一个例子:

<?php
$query="";
if (isset($_GET['query'])) $query=$db_handler->real_escape_string($_GET['query']);

$sql="SELECT `user_id`,`user_name` FROM `some_table`
    WHERE `user_name` LIKE '%{$query}%' ORDER BY `user_name`";
$res=$db_handler->query($sql);

if ($res->num_rows > 0)
{
    $data=array();
    while($row = $res->fetch_object())
    {
        $data[]=array("value" => $row->user_name, "data" => $row->user_id);
    }
    $res->free();
}
header('Content-Type: application/json');
echo json_encode(array("suggestions" => $data));
?>

这是格式。autocomplete需要:JavaScript对象表示法。

看起来您没有遵循。我用{“Value”:“XX”}获得了它,但仍然存在相同的问题,如何在PHP中添加{“建议”:[…]}?您需要创建一个对象。让我更新一下答案。你很棒,它工作了,但只是一个更正,stdObject()不工作,它应该是$obj=new stdClass();非常感谢。
<?php
$query="";
if (isset($_GET['query'])) $query=$db_handler->real_escape_string($_GET['query']);

$sql="SELECT `user_id`,`user_name` FROM `some_table`
    WHERE `user_name` LIKE '%{$query}%' ORDER BY `user_name`";
$res=$db_handler->query($sql);

if ($res->num_rows > 0)
{
    $data=array();
    while($row = $res->fetch_object())
    {
        $data[]=array("value" => $row->user_name, "data" => $row->user_id);
    }
    $res->free();
}
header('Content-Type: application/json');
echo json_encode(array("suggestions" => $data));
?>
{"suggestions":[{"value":"Joe Blow","data":"1000"},{"value":"Jane Blow","data":"1001"}]}