如何将PHP中两条SQL查询结果通过AJAX传递给单个JS函数使用
问题核心原因
你出现undefined的本质是PHP返回的内容不是标准JSON结构,导致JS端解析失败,原因有几个:
- PHP变量未定义抛出的notice警告、数据库查询失败输出的错误信息和JSON混在一起,破坏了结构
- 输出JSON的方式不对,且没有终止后续输出,可能混入多余的空格、换行
- while循环逻辑有漏洞,如果第二条查询无返回结果,
$einer、$zwoelfer变量未定义
修复步骤
1. 修复PHP代码
<?php require 'inc/db.php'; // 第一条查询 $erg = $db->query("SELECT id, sender FROM packaging_log WHERE sender='test' AND packaging='1er'") or die($db->error); // 第二条查询 $gesteigereiner = $db->query("SELECT * FROM geliefert WHERE 1") or die($db->error); // 先初始化变量,避免查询无结果时变量未定义 $einer = 0; $zwoelfer = 0; while ($zeile = $gesteigereiner->fetch_object()) { $einer = $zeile->test1er; $dreier = $zeile->test3er; $sechser = $zeile->test6er; $zwoelfer = $zeile->test12er; // 注意:如果你的geliefert表有多行数据,这里的写法只会保留最后一行的值,如果要所有数据需要用数组存储 } $geliefert = array ( "nr" => $erg->num_rows, "einer" => $einer, "zwoelfer" => $zwoelfer ); // 加JSON响应头,避免浏览器识别错误 header('Content-Type: application/json; charset=utf-8'); // 用echo输出JSON,不要用print_r,输出后立刻终止程序,避免多余内容 echo json_encode($geliefert); exit; ?>
另外请检查inc/db.php文件的首尾,不要有PHP标签外的空格、换行,也不要有其他echo/print输出,否则会混入JSON内容导致解析失败。
2. 优化JS代码
function clickPHPtoJS(){ $.ajax({ url: "index.php", type: "POST", dataType: "json", // 声明返回格式为JSON,jQuery会自动解析 success: function(response) { console.log(response); clickPHPtoJSResponse(response); }, error: function (xhr) { // 出错时打印原始返回内容,方便排查问题 console.log("请求失败,原始返回内容:", xhr.responseText); } }); } function clickPHPtoJSResponse(response) { // 做空值兼容,避免属性不存在时报错 var einer = response.einer || '无数据'; var zwoelfer = response.zwoelfer || '无数据'; var anzahl = response.nr || '无数据'; document.getElementById("lab1er").innerHTML = einer + " " + zwoelfer + " " + anzahl; }
排查验证方法
你可以直接在浏览器访问你的index.php地址,查看输出的内容:
- 如果是纯JSON格式(比如
{"nr":3,"einer":5,"zwoelfer":2}),说明PHP端输出正常 - 如果有报错信息、空格、换行等其他内容,就对应处理这些额外输出即可
你的需求完全可行,不需要迂回方案,把以上问题修复就能正常运行。
内容的提问来源于stack exchange,提问作者Marley2009
相关产品推荐
相关产品推荐

