自动补全输入框仅显示首字母问题求助(附相关代码)
问题诊断与修复方案
嘿,我一眼就看出问题出在哪了——你的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
相关产品推荐
相关产品推荐

