如何将PHP数组编码为JSON并解析为jQuery

3
我将使用Ajax调用下拉菜单来获取记录,但问题在于它只获取了一个记录,而数据库中有三个记录。
这是我的PHP代码:
<?php
include 'config/dbconfig.php';

$genid      = $_POST['id'];
$operatorId = $_POST['operatorId'];

$query = mysqli_query($con, "SELECT * FROM generatorrun WHERE generatorId='$genid' AND operatorId='$operatorId'");
while($result = mysqli_fetch_array($query)) {

    $turnOn           = $result['startTime'];
    $turnOff          = $result['endTime'];
    $datetime1        = new DateTime($turnOn);
    $datetime2        = new DateTime($turnOff);
    $interval         = $datetime1->diff($datetime2);
    $datedifference   = $interval->format('%Y-%m-%d %H:%i:%s');
    $startReading     = $result['startReading'];
    $endReading       = $result['endReading'];
    $dailyConsumption = $endReading - $startReading;

    $postData = array(
        "turnOn"           => $turnOn,
        "turnOff"          => $turnOff,
        "runningTime"      => $datedifference,
        "startReading"     => $startReading,
        "endReading"       => $endReading,
        "dailyConsumption" => $dailyConsumption,
    );
}

echo json_encode($postData);
?>

我需要从MySQL中获取值并将其存储在关联数组中,然后使用json_encode()函数对其进行编码。

以下是在jQuery中提取记录的代码:

<script>
$(document).ready(function () {
    $(".bg-yellow").hide();
    $(".bg-red").hide();
    $("#getGen").change(function () {

        var id = $('#getGen').val();
        var operatorId = $(".opid").val();
        $.ajax({
            type: "POST",
            url: 'getGenerator.php',
            data: {id: id, operatorId: operatorId},
            success: function (response) {
                var data = jQuery.parseJSON(response);
                $(".turnOn").html(data.turnOn);
                $(".turnOff").html(data.turnOff);
                $(".running").html(data.runningTime);
                $(".startReading").html(data.startReading);
                $(".endReading").html(data.endReading);
                $(".dailyConsumption").html(data.dailyConsumption);
                $(".bg-yellow").show();
                $(".bg-red").show();
            }
        });
    });
});
</script>

问题在于它只获取了一条记录,而我已经使用了while循环来遍历MySQL表中的所有记录,但它只获取了一条记录。


2
$postData[] = array( 的意思是什么,你知道吗? - u_mulder
是的,我也尝试过这种方法,但结果仍然相同。 - hotshot code
1
这是什么意思 - 相同?你在控制台看到了什么?如果你有一组项目 - 你需要对它们进行迭代。 - u_mulder
1
你的脚本容易受到SQL注入攻击,即使你对输入进行了转义,也不安全!请使用预处理参数化语句 - RiggsFolly
3个回答

0
在你的 while 循环中,你正在赋值变量。因此,每次循环都会覆盖这些值。你必须使用 array_push
$postData = array();
while($result=mysqli_fetch_array($query)){
$turnOn=$result['startTime'];
$turnOff=$result['endTime'];
$datetime1 = new DateTime($turnOn);
$datetime2 = new DateTime($turnOff);
$interval = $datetime1->diff($datetime2);
$datedifference=$interval->format('%Y-%m-%d %H:%i:%s');
$startReading=$result['startReading'];
$endReading=$result['endReading'];
$dailyConsumption=$endReading-$startReading;
  array_push($postData,array(
    "turnOn" => $turnOn,
    "turnOff" => $turnOff,
    "runningTime"=>$datedifference,
    "startReading"=>$startReading,
    "endReading"=>$endReading,
    "dailyConsumption"=>$dailyConsumption
    ));
  }

如何解析 JSON 中这种类型的数组。 - hotshot code
如何将其解析为jQuery - hotshot code

0

你只需要定义一个数组。

<?php
include 'config/dbconfig.php';

$postData = array();
$genid=$_POST['id'];
$operatorId=$_POST['operatorId'];

$query=mysqli_query($con,"SELECT * FROM generatorrun WHERE generatorId='$genid' AND operatorId='$operatorId'");

while($result = mysqli_fetch_array($query)) {

    $turnOn=$result['startTime'];
    $turnOff=$result['endTime'];
    $datetime1 = new DateTime($turnOn);
    $datetime2 = new DateTime($turnOff);
    $interval = $datetime1->diff($datetime2);
    $datedifference=$interval->format('%Y-%m-%d %H:%i:%s');
    $startReading=$result['startReading'];
    $endReading=$result['endReading'];
    $dailyConsumption=$endReading-$startReading;

    $postData[] = array(
        "turnOn" => $turnOn,
        "turnOff" => $turnOff,
        "runningTime"=>$datedifference,
        "startReading"=>$startReading,
        "endReading"=>$endReading,
        "dailyConsumption"=>$dailyConsumption
    );
}

echo json_encode($postData);
?>

我得到了一个空的 JSON。 - hotshot code
我可以使用alert吗? - hotshot code
请问您能否提供一个解决方案? - hotshot code
你能给我你的 JSON 响应吗? - Devendra Choudhary
问题可能在 jQuery 解析中。 - hotshot code
显示剩余5条评论

0

试一下这个:

include 'config/dbconfig.php';
$genid      = $_POST['id'];
$operatorId = $_POST['operatorId'];
$query = mysqli_query($con, "SELECT * FROM generatorrun WHERE generatorId='$genid' AND operatorId='$operatorId'");
$postData = array();
while($result = mysqli_fetch_array($query))
{

$turnOn           = $result['startTime'];
$turnOff          = $result['endTime'];
$datetime1        = new DateTime($turnOn);
$datetime2        = new DateTime($turnOff);
$interval         = $datetime1->diff($datetime2);
$datedifference   = $interval->format('%Y-%m-%d %H:%i:%s');
$startReading     = $result['startReading'];
$endReading       = $result['endReading'];
$dailyConsumption = $endReading - $startReading;

$postData[] = array( // this is you missed here
        "turnOn"           => $turnOn,
        "turnOff"          => $turnOff,
        "runningTime"      => $datedifference,
        "startReading"     => $startReading,
        "endReading"       => $endReading,
        "dailyConsumption" => $dailyConsumption,
);
}

它将给你多个结果集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接