正确的json格式的数据

时间:2016-07-28 14:32:45

标签: php json ajax

我正在研究我网站的一项功能,我需要点击按钮触发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);
?>

3 个答案:

答案 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);

未经测试,但应该为您提供所需。