我正在研究我网站的一项功能,我需要点击按钮触发ajax调用。我正在以这种格式接收数据:
Object {
name: "abc",
category_id: "1"
}
我想要一个这样的结果:
{
"list" : [
{
"name" : "xyz",
"category_id" : "1"
}, {
"name" : "abc",
"category_id" : "11"
}
]
}
我的服务器端代码是:
<?php
header('Content-Type: application/json');
$conn = mysqli_connect("localhost","root","","test") or die(mysqli_error());
$name = $_GET['name'];
$sql = "SELECT * from test_search where name = '$name'";
$result = mysqli_query($conn,$sql) or die(mysqli_error($conn));
while($row = mysqli_fetch_array($result)) {
$name = $row['name'];
$category = $row['category_id'];
}
$data = array("name" => $name , "category_id" => $category );
echo json_encode($data);
?>
答案 0 :(得分:1)
之前,您将$ row数组项分配给变量,然后在循环之后才使用它们。在循环之后,您使用了这些变量,但它只有最后的值。您必须将项目附加到数组内部的数组(“列表”),然后json_encode()
将结果附加到循环中以获得所需的效果。
<?php
$conn = mysqli_connect("localhost","root","","test") or die(mysqli_error());
$name = $_GET['name'];
header('Content-Type: application/json');
$sql = "SELECT * from test_search where name = '$name'";
$result = mysqli_query($conn,$sql) or die(mysqli_error($conn));
$data_array = array('list' => array());
while($row = mysqli_fetch_array($result))
{
$data_array['list'][] = array("name" => $row['name'], "category_id" => $row['category_id'] );
}
echo json_encode($data_array);
?>
未经测试的代码,对任何语法错误道歉。
我还想指出您的代码对SQL injection attacks开放。请点击PHP手册的链接,了解有关这些内容以及如何预防这些内容的更多信息。
答案 1 :(得分:1)
您需要将$ name和$ category变量推送到另一个数组中 - 目前您只是在while循环中覆盖这些值。
做类似的事情:
$list = array();
while($row = mysqli_fetch_array($result))
{
$list[] = array('name'=>$row['name'], 'category_id'=>$row['category_id']);
}
$data = array('list'=>$list);
echo json_encode($data);
答案 2 :(得分:1)
在这里阅读有关PHP数组的内容 - http://php.net/manual/en/function.array.php
在您直接跳至json_encode($data)
之前,请尝试var_dump($data)
查看您正在使用的内容。
您需要在while循环中构建数组,
$data = [];
while($row = mysqli_fetch_array($result)) {
$data['list'][] = [
'name' => $row['name'],
'category' => $row['category']
]
}
echo json_encode($data);
未经测试,但应该为您提供所需。