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

自动补全输入框仅显示首字母问题求助(附相关代码)

问题诊断与修复方案

嘿,我一眼就看出问题出在哪了——你的PHP代码把本该是数组的数据处理成了字符串,导致JS里的自动补全逻辑在遍历字符而非软件名称,这就是为啥只能匹配首字母!

问题根源

看你这段PHP代码:

$query1 = "SELECT software_name from software";
$result = mysqli_query($sdpc_i, $query1);
$types = array();
while ($row = $result->fetch_assoc()) {
    $types[] = '"'.$row['software_name'].'"'; // 画蛇添足的引号
}
$types2 = implode(",",$types); // 把数组拼成了一个长字符串

你手动给每个软件名称加了双引号,再拼成类似"Brainpop","Google"的字符串。当json_encode处理这个字符串时,最终生成的JS代码是:

var software_list = "\"Brainpop\",\"Google\"";

也就是说software_list是个字符串,不是数组!自动补全函数遍历它的时候,arr[i]取到的是单个字符,自然只能匹配输入的首字母。

修复方案

完全不需要手动处理引号和拼接,直接把查询到的纯字符串数组传给json_encode就行,它会自动生成正确的JS数组格式:

修改你的PHP和JS代码段为:

$query1 = "SELECT software_name from software";
$result = mysqli_query($sdpc_i, $query1);
$types = array();
while ($row = $result->fetch_assoc()) {
    $types[] = $row['software_name']; // 直接存原始名称,不要加引号
}
?>
<script>
var software_list = <?php echo json_encode($types, JSON_UNESCAPED_SLASHES); ?>;
</script>

这样生成的JS代码会是标准的数组:

var software_list = ["Brainpop","Google",...];

自动补全函数就能正常遍历每个软件名称,实现完整的前缀匹配了。

额外小建议

  • 给数据库查询加个错误判断,方便排查问题:
    if (!$result) {
        die("查询失败: " . mysqli_error($sdpc_i));
    }
    
  • 永远不要手动拼接JSON格式,交给json_encode处理,能避免各种引号转义、格式错误的坑。

内容的提问来源于stack exchange,提问作者lwaters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:32:47