PHP中如何提取JSON数组的值作为变量并在AJAX接收页使用
解决步骤
一、先修正page1的代码问题
你当前的page1代码有两个遗漏点:
- while循环没有给$i自增,只会存储最后一条查询结果
- 没有将PHP数组转为JSON字符串输出给前端AJAX
修正后的page1代码:
// 加响应头,指定返回JSON格式 header('Content-Type: application/json'); $json = []; // 这里也建议用预处理语句避免SQL注入 $stmt = mysqli_prepare($connection, "select * from json where id = ?"); mysqli_stmt_bind_param($stmt, "s", $id); mysqli_stmt_execute($stmt); $run = mysqli_stmt_get_result($stmt); while($exe = mysqli_fetch_array($run, MYSQLI_ASSOC)) { // 不需要手动维护$i,直接追加数组即可 $json[] = [ "name" => $exe["name"] ]; } // 输出JSON字符串给前端 echo json_encode($json);
二、前端AJAX传值逻辑
拿到page1返回的JSON数据后,请求page2时将该JSON数据作为参数传递即可,原生JS示例:
// 先请求page1拿数据 fetch('page1.php') .then(res => res.json()) .then(jsonData => { // 再请求page2,把JSON数据传过去 return fetch('page2.php', { method: 'POST', body: JSON.stringify(jsonData), headers: { 'Content-Type': 'application/json' } }) })
三、page2获取name值的实现
// 接收前端传过来的原始JSON数据 $receivedJson = file_get_contents('php://input'); // 转为PHP关联数组,第二个参数必须传true才会返回数组格式 $jsonArray = json_decode($receivedJson, true); // 取单条name值,下标对应page1返回的数组顺序,取第一条就写0 // 空合并运算符用来避免下标不存在时报错 $name = $jsonArray[0]['name'] ?? ''; // 如果需要遍历所有name值,用foreach循环即可 foreach($jsonArray as $item) { $currentName = $item['name']; // 针对单个name的业务逻辑 } // 后续查询务必要用预处理语句,避免SQL注入,不要用字符串拼接的写法 $stmt = mysqli_prepare($connection, "select name from json1 where name = ?"); mysqli_stmt_bind_param($stmt, "s", $name); mysqli_stmt_execute($stmt); $query1Result = mysqli_stmt_get_result($stmt);
注意事项
- 如果page1返回的数组有多条数据,不要固定写死下标,建议通过遍历获取所有name值
- 所有涉及数据库操作的场景都不要直接拼接用户传入的变量,必须用预处理语句规避SQL注入漏洞
内容的提问来源于stack exchange,提问作者Thasleem Liyazee
相关产品推荐
相关产品推荐

