javascript - 无法在来自 php 文件的 js ajax 请求中接收 json
问题描述
onclick 到一个按钮上,js 会启动对 php 文件的 ajax 请求。然后,php 文件使用 php-loop 获取数据库的一个表的所有条目。将它们添加到数组中,然后 php 文件将其解析为 JSON 并将其回显给 ajax 请求。成功时,ajax 请求应该输出一个警报,但我既没有收到错误也没有收到警报。
根据评论添加一些更改后。它现在随机显示错误消息 2 错误消息:
Fehler: {"readyState":0,"responseText":"","status":0,"statusText":"error"}
Fehler: {"readyState":4,"responseText":"<br />\n<b>Fatal error</b>: Uncaught Error: Cannot use object of type mysqli_result as array in C:\\xampp\\htdocs\\integration\\get.php:32\nStack trace:\n#0 C:\\xampp\\htdocs\\integration\\get.php(13): getLevel1()\n#1 {main}\n thrown in <b>C:\\xampp\\htdocs\\integration\\get.php</b> on line <b>32</b><br />\n","status":200,"statusText":"OK"}
php 请求(故意省略 mysqli 属性):
$func = $_POST['func'];
if ($func == "getLevel1"){
getLevel1();
}
$result = array();
function getLevel1(){
// Create connection
$conn = new mysqli(servername, username, password, dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, name FROM capability_level1";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$result[] = '<button onclick="capability('. $row["id"] .')">' . $row["name"]. '</button></br>';
}
echo json_encode($result);
} else {
echo json_encode("0 results");
}
$conn->close();
}
js ajax 调用:
async function getLevel1() {
return $.ajax({
type: "POST",
dataType: "json",
url: "get.php",
data: {
func: "getLevel1"
},
success: function(data) {
alert(JSON.stringify(data));
console.log(data);
},
error: function(data) {
alert("Fehler: "+ JSON.stringify(data));
}
});
}
解决方案
当你有一个完整的数组要编码时,你需要把 json 编码: 之后:
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$result[] = '<button onclick="capability('. $row["id"] .')">' . $row["name"]. '</button></br>';
}
echo json_encode($result);
} else {
另请注意,您可能必须将数据类型更改为 Json(并将 json 发送到 php)才能返回它。实际上,您的 Ajax 正在等待返回文本(基于数据类型)
对于您的进一步错误:这与您使用错误的函数从 mysql 获取行有关。有关如何修复它的更多详细信息,请参阅此问题。
推荐阅读
- elixir - 获取“无法配置”版本!与酿酒厂
- java - 在运算符或数字上拆分带有运算符和数字的序列
- spring - 如何在 html 页面的 thymeleaf 字段中输入空值?
- regex - Javascript 负环视
- c# - 在 ASP.NET MVC 中为控制器注入不同的记录器
- c# - WPF 的性能问题
- terraform - Terraform 不喜欢在我的 NACL 块中包含字符串列表的变量,不知道为什么
- vb.net - 网页解析 VB.net
- firebase - 我可以为我拥有的每个集合添加 Firestore 规则吗?
- pandas - 如果值不在不同的数据框中,熊猫会丢弃行