使用jsonencode在AJAX中返回多数据:数组取值异常问题
解决AJAX返回数组无法提取具体值的问题
嘿,我帮你梳理下当前的问题:你通过AJAX请求拿到了包含数组和字符串的返回值,能正常获取第二个字符串,但没法从第一个数组里提取price字段。咱们来一步步解决这个问题:
先搞清楚问题出在哪
你的代码里有个容易忽略的结构问题:
- PHP返回的结构:你用
while循环把查询到的每一行数据都塞进了$rows数组,所以最终返回的array($rows, $p)里,第一个元素$rows本身是一个数组套数组的结构(哪怕查询结果只有一条数据,它也是包含单个元素的数组)。 - AJAX取值错误:你现在写的
result[0].price,其实是在访问这个外层数组,而不是里面的单条数据对象,自然拿不到price属性。
两种解决方案任你选
方案1:优化PHP代码(更推荐,因为room_id一般是主键,查询结果唯一)
既然是按room_id查询,大概率只会返回一条数据,没必要用循环遍历,直接取出单条数据就行,这样返回的结构更简洁,还能顺便解决SQL注入的风险:
<?php include "db.php"; $roomoccp = $_POST['roomoccp']; // 用预处理语句防止SQL注入,这很重要! $sql = "SELECT * FROM room where room_id=?"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $roomoccp); $stmt->execute(); $result = $stmt->get_result(); // 直接获取单条查询结果 $row = mysqli_fetch_assoc($result); $p = "Second value is"; $conn->close(); // 这里直接传入单条数据$row,而不是数组$rows print json_encode(array($row, $p)); ?>
修改PHP后,你原来的AJAX取值代码就可以正常工作了:
success: function (result) { $(dis).parents(".addroom").find(".roomprice").val(result[0].price); alert(result[1]); }
方案2:不改动PHP,调整JS的取值逻辑
如果你不想动PHP代码,那只需要在JS里多一层数组访问,拿到$rows里的第一条数据再取price:
success: function (result) { // result[0]是$rows数组,取它的第一个元素才是我们要的单条数据 $(dis).parents(".addroom").find(".roomprice").val(result[0][0].price); alert(result[1]); }
重要提醒:防范SQL注入
你的原PHP代码直接把用户传入的roomoccp拼进SQL语句,这存在严重的SQL注入风险!上面的方案1用了预处理语句来规避这个问题,一定要记得用参数化查询处理用户输入,别让安全漏洞留隐患。
内容的提问来源于stack exchange,提问作者X Solutions
相关产品推荐
相关产品推荐

