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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:47:40