将PHP数组转储为条件内容的JSON

时间:2017-01-02 19:42:17

标签: php jquery arrays json ajax

我有"条件内容"基于内容的类型,如下所示:

//--- Here goes a nice SQL where I get the content, this works ok. ---
if(mysqli_num_rows($niceSQL) > 0) {
    while($something = mysqli_fetch_array($niceSQL)) {

        $type = $something["type"];

        if ("type" == "A") {
            $data1 = $something["data1"];
            $data2 = $something["data2"];
            $data3 = $something["data3"];

            $something_A = array(
                "one" => $data1,
                "two" => $data2,
                "three" => $data3,
            );

            echo json_encode($something_A, JSON_FORCE_OBJECT);
        } else if ("type" == "B") {
            $data1 = $something["data1"];
            $data2 = $something["data2"];
            $data3 = $something["data3"];

            $something_B = array(
                "one" => $data1,
                "two" => $data2,
                "three" => $data3,
            );

            echo json_encode($something_B, JSON_FORCE_OBJECT);
        }
    }
}

我试图将每个数组转储为JSON,以便使用jQuery Each来处理它。

问题是所有得到的"打印" (回显)同时,因此AJAX响应是" parsererror "。我以这种方式得到这个错误:

(ajax and config here).fail(function( jqXHR, textStatus ) {
    console.log( "Request failed: " + textStatus );
})

那么,我如何独立但一起打印每个$something_A$something_B? Together意味着只有一个ajax请求,所以我可以使用jQuery Each来处理内容。

如果我只打印第一个$something_A或第一个$something_B,那么我可以执行"每个"循环(这就是为什么我假设PHP" json_encode"函数正常工作),但它对我没用(因为我只接收了许多&中的第一个& #34;出头"。)

注意:我可以更改转储的逻辑,而不是我如何获取内容(SQL + while)。

3 个答案:

答案 0 :(得分:1)

首先,创建一个新数组:$result = []; 然后在while循环中,将echo json_encode($something_A, JSON_FORCE_OBJECT);更改为$result[] = $something_A; 循环之后,使用:echo json_encode($result, JSON_FORCE_OBJECT);

答案 1 :(得分:1)

每个ajax请求只能发送一个json输出

创建一个外部主数组,它有2个属性'A''B',每个属性都是空数组,然后将每一行推到适当的一行,然后循环回显主数组

$output= array(
   'A'=>array(),
   'B'=>array()
);

while($something = mysqli_fetch_array($niceSQL)) {

    $type = $something["type"];

    if ("type" == "A") {
       .......
       $output['A'][] = $something_A;

    } else if ("type" == "B") {
       ......
       $output['B'][] = $something_B;
    }
}

echo json_encode($output);

然后在jQuery中你有一个具有2个属性的对象,每个属性都是一个数组

答案 2 :(得分:0)

如何将echo放在脚本末尾?

  1. 替换您的echo json_encode($something_A, JSON_FORCE_OBJECT);echo json_encode($something_B, JSON_FORCE_OBJECT); array_push($mySolutionArray, $something_)
  2. 在脚本末尾放置:echo $mySolutionArray
  3. 不要忘记初始化$mySolutionArray