通过PHP中的循环回显JSON?

时间:2013-10-20 20:22:14

标签: php ajax json

我有一个循环来抓取DB值并创建一个对象。我希望每次迭代循环时都回显一个JSON对象。截至目前,我只是在我的控制台中空白。另外,那些注释掉printf语句的人工作正常。任何帮助将不胜感激!

AJAX调用

$.ajax({
        url:'ajax/ipGet.php',
        type: 'GET',
        dataType:'json',
        success:function(response){
            console.log(response);
        }

    });

PHP数据生成

$infoArray = new Array();
while($row = mysqli_fetch_array($getIpQuery, MYSQLI_NUM)){
    for($x=0;$x<count($row);$x++)
    {
        $getIpInfo = mysqli_query($dbcon,"SELECT * FROM ipInfo WHERE address='$row[$x]'");
        $retrievedInfo = mysqli_fetch_array($getIpInfo,MYSQLI_NUM);
        $ipInfo->ipAddress = $retrievedInfo[0];
        $ipInfo->port = $retrievedInfo[1];
        $ipInfo->status = getStatus($ipInfo->ipAddress, $ipInfo->port);
        array_push($infoArray,$ipInfo);

    } 
  }

echo json_encode($infoArray);

感谢您的帮助!

〜Carpetfizz

1 个答案:

答案 0 :(得分:2)

json必须是一个独立的实体。您正在输出多个单独的JSON文本位,这是不正确的。

JSON编码应该是你做的最后一件事,例如

while(...) {
   $array[] = ....
}
echo json_encode($array);

从客户角度考虑你正在做什么...构建一个ipinfo数组,这样你就可以运行一次循环并生成

{"ipAddress":"127.0.0.1","port":80,....}

但是你多次这样做,所以你最终得到了

{"ipAddress":"127.0.0.1","port":80,....}{"ipAddress":"127.0.0.1","port":80,....{"ipAddress":"127.0.0.1","port":80,....}

作为你的输出,现在你有非法的javascript。请记住,JSON文本必然是Javascript赋值操作的右侧,例如

var somevar = ...json_goes_here...;

所以你正在做

var stuff = {...}{...}{...};

这是一个彻头彻尾的语法错误,而不是

var stuff = [{...},{...},{...}];

这是正确的。