将MySQL查询结果导入JavaScript数组后格式异常如何解决
问题原因
你不需要手动给数组元素加引号、也不需要手动把数组拼接成字符串,json_encode本身就能把PHP数组直接转换成符合JavaScript语法的数组格式。你当前的写法相当于把一整个逗号分隔的字符串当成了JS数组的唯一元素,所以才会全部显示为一条选项。
代码修改步骤
1. 调整PHP数据处理逻辑
删除手动加引号、拼接字符串的多余操作,直接将查询到的名称存入数组即可:
<?php $servername = 'localhost'; $username = 'root'; $password = 'password'; $dbname = 'coins'; $conn = new mysqli($servername,$username,$password,$dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT DISTINCT name FROM uscoins"; $result = $conn->query($sql); $testarray = array(); while($row = mysqli_fetch_array($result)){ // 直接存储原始值,不需要手动拼接引号 $testarray[] = $row['name']; } $conn->close(); ?>
2. 调整JavaScript赋值逻辑
直接输出json_encode处理后的PHP数组,不需要额外套一层方括号,json_encode输出的内容本身就包含完整的数组结构:
var countries = <?php echo json_encode($testarray); ?>; autocomplete(document.getElementById("myInput"), countries);
原写法错误说明
你之前生成的$name_string是类似"阿富汗","阿尔巴尼亚","阿尔及利亚"的字符串,用json_encode处理后输出的内容会被转义为一整个字符串,放到[]中后JS得到的数组就只有一个元素,自然无法拆分出独立选项。直接用json_encode处理PHP原生数组,输出的内容和你最开始写的静态数组格式完全一致,既可以正常拆分选项,还能自动转义名称中的特殊字符,避免语法报错。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

