正确使用echo json_encode(array('error'=> false / true。

时间:2013-03-28 15:53:35

标签: php json

我正在构建一个假设回答jquery ajax调用的函数。我是PHP的新手,并且有更新的学习如何正确使用echo json_encode(array('error' => false/true;。在这种特定情况下,希望json编码一个名为$list的数组数组。我的代码:

<?php
 if (!empty($_GET['id'])) {
   $id = $_GET['id'];

   try {
     $objDb = new PDO('mysql:host=localhost;dbname=blankett', 'root', 'root');
     $objDb->exec('SET CHARACTER SET utf8');

     $sql = "SELECT * FROM `forms2` where `master_id` = $id";
     $list = ($objDb->query($sql));

     foreach ($list as $row) {
        $out = array(
            '<tr>' . 
             '<td><a href="'.$row['link_form'].'">'.$row['name_form'].'</a></td>'.
             '<td>'.$row['date_added'].'</td>' . 
            '</tr>');
     }
     echo json_encode(array('error' => false, 'list' => implode('', $out)));

    /*** close the database connection ***/
    $objDb = null;
   }
   catch(PDOException $e)
   {
     echo $e->getMessage();
   }
 } else {
     echo json_encode(array('error' => true));
 }
?>

所以问题一般是如何使用json_encode(array('error' => false/true;以及如何在这种特定情况下使用它?

3 个答案:

答案 0 :(得分:1)

循环的第一行仅将从 $ list 检索到的最后一行分配给 $ out 。其次,implode不会为您提供数组,而是将数组作为参数并返回由您提供的分隔符分隔的字符串。

php.net/implode

这是你要做的事情:

     $out = array();
     foreach ($list as $row) {
       $out[] = '<tr><td><a href="'.$row['link_form'].'">'.$row['name_form'] .   
               '</a></td><td>'.$row['date_added'].'</td></tr>';
     }

     echo json_encode('error' => false, 'list' => $out);

或者如果您尝试传递字符串而不是数组,那么请像在$out上一样使用implode

答案 1 :(得分:1)

你可以这样做:

   $result = true;

    echo json_encode(array("error"=>$result
                               ));

然后:

    $.ajax({
    type: "POST",
    url: "yourfile.php",
    data : "data1="+yourdata1+"&data2="+yourdata2,
    dataType: "json",
    success: function (data) {
    var error = data['error'];
    if(error === false){
    //do something                                                  
    }
if(error === true) {
    //do something else     
}
   }
      });//end ajax             

答案 2 :(得分:1)

一般情况下,您可以直接将json_encode与您的数据一起使用,而无需&#34; implode&#34;它或类似的东西。

如果$ out是一个数组数组,那么你的代码是:

echo json_encode(array('error' => false, 'list' => implode('', $out)));

会产生:

{ result: false, list: 'Array,Array,Array' }

你应该只允许json_encode来完成它的工作:

echo json_encode(array('error' => false, 'list' => $out));

哪会给你:

{ result: false,
  list:
   [ [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ] ] }

然而,关于循环的先前评论很重要。你的循环在每次迭代时重新分配$ out变量。你肯定想添加[] =而不是只是=。这是PHP中的一个快捷方式,意味着将其推送到我的数组&#34;。它实际上是array_push()

的快捷方式
foreach ($list as $row) {
  $out []= array('<tr><td><a href="'.$row['link_form'].'">'.$row['name_form'].'</a></td>  <td>'.$row['date_added'].'</td></tr>');
}

最后,你的表格行不会作为一个数组,除非这是你想要的。