AngularJS与PHP获取MySQL指定数据异常,请求排查问题
解决AngularJS GET请求无法获取MySQL数据的问题
嘿,咱们一步步来排查你的问题,你遇到的情况是因为PHP代码里有两个关键错误,导致没能返回预期的表数据:
第一个问题:错误的$_POST判断导致脚本提前终止
你的AngularJS用的是GET请求,但PHP里第一行就写了if(!isset($_POST)) die();——GET请求下$_POST是空的,这个判断会直接让脚本停止执行,后面的数据库查询根本没机会运行!直接把这行删掉就行。
第二个问题:直接编码mysqli结果集对象而非实际数据
mysqli_query($con, $query)返回的是结果集对象,不是你要的表数据内容。你需要把结果集里的每一行数据提取出来,放到数组里再编码成JSON。
修改后的完整PHP代码
<?php header('Access-Control-Allow-Origin: *'); header('Content-Type: application/json'); session_start(); // 如果你不需要会话功能,可以考虑去掉这行,保留也不影响 // 初始化响应数组 $response = []; // 建立数据库连接并检查连接错误 $con = mysqli_connect('localhost', 'root', '', 'projekt'); if (!$con) { // 连接失败时返回错误信息 $response['error'] = '数据库连接失败: ' . mysqli_connect_error(); echo json_encode($response); exit; } // 执行查询并检查查询错误 $query = "SELECT * FROM messages WHERE section='3'"; $result = mysqli_query($con, $query); if (!$result) { $response['error'] = '查询失败: ' . mysqli_error($con); echo json_encode($response); exit; } // 从结果集中提取所有数据到数组 while ($row = mysqli_fetch_assoc($result)) { $response[] = $row; } // 编码并输出JSON数据 echo json_encode($response); // 关闭数据库连接 mysqli_close($con); ?>
额外的AngularJS优化建议
你的GET请求不需要设置headers: { 'Content-Type': 'application/x-www-form-urlencoded' },因为GET请求没有请求体,这个Header是给POST表单提交用的。可以去掉这行,让请求更简洁:
$http({ url: 'http://localhost/webpack/downloadMessage.php', method: 'GET' }).then(function(response){ console.log("CHECKED"); console.log(response.data); }, function(response) { alert('something wrong'); })
现在再运行代码,控制台应该就能输出messages表中section为3的所有数据啦!
内容的提问来源于stack exchange,提问作者Kondziowsky
相关产品推荐
相关产品推荐

