You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JQuery UI Autocomplete失效:输入显示全部数据无筛选问题求助

解决jQuery UI Autocomplete不筛选数据的问题

嘿,我一眼就发现问题所在啦!你的Autocomplete之所以每次都返回全部数据,是因为后端的tags.php根本没处理前端传过来的搜索关键词——jQuery UI Autocomplete在用户输入时,会自动给后端发送一个名为term的GET参数,里面就是用户当前输入的内容,你得用这个参数去数据库做模糊查询才行!

另外还有个小问题:你前端同时引入了jquery.min.js和jquery-1.12.4.js,这两个是同一个库的不同版本,会导致冲突,得删掉其中一个哦。

第一步:修复后端tags.php的查询逻辑

修改tags.php,加入对term参数的处理,同时做SQL注入防护:

<?php
include_once("connect.php");

// 获取前端传来的搜索关键词,默认空字符串,同时转义特殊字符防止注入
$search_term = isset($_GET['term']) ? mysqli_real_escape_string($conn, $_GET['term']) : '';

// 使用LIKE进行模糊查询,匹配包含关键词的姓名
$sql = "SELECT full_name FROM tbl_names WHERE full_name LIKE '%{$search_term}%'";
$result = mysqli_query($conn, $sql);

$data = array();
while ($row = mysqli_fetch_assoc($result)) {
    $data[] = $row['full_name'];
}

echo json_encode($data);
?>

如果想要更安全的写法(推荐用预处理语句彻底避免SQL注入),可以改成这样:

<?php
include_once("connect.php");

$search_term = isset($_GET['term']) ? $_GET['term'] : '';

// 预处理SQL语句
$sql = "SELECT full_name FROM tbl_names WHERE full_name LIKE ?";
$stmt = mysqli_prepare($conn, $sql);
// 构造模糊匹配的参数
$like_term = "%{$search_term}%";
// 绑定参数(s表示字符串类型)
mysqli_stmt_bind_param($stmt, "s", $like_term);
// 执行查询
mysqli_stmt_execute($stmt);
// 获取结果集
$result = mysqli_stmt_get_result($stmt);

$data = array();
while ($row = mysqli_fetch_assoc($result)) {
    $data[] = $row['full_name'];
}

echo json_encode($data);
// 关闭语句和连接
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

第二步:修复前端的jQuery引用冲突

删掉重复的jQuery文件引用,保留一个即可,比如:

<script src="jquery-1.12.4.js"></script>
<script src="jquery-ui.js"></script>
<script type="text/javascript">
$(function (){
    $("#names").autocomplete({
        source: "tags.php"
    });
});
</script>

这样修改之后,当你在输入框里打字时,Autocomplete就会带着用户输入的关键词去后端查询,只返回匹配的结果啦!

内容的提问来源于stack exchange,提问作者James Arvin Rozul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:22:49