2

我正在构建一个假设回答 jquery ajax 调用的函数。我对 PHP 很陌生,并且新人学会了如何正确使用 echo json_encode(array('error' => false/true;。在这种特定情况下,想要对一个名为$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;以及在这种特定情况下我将如何使用它?

4

3 回答 3

1

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

php.net/内爆

这是您要执行的操作:

     $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);

或者如果你试图传递一个字符串而不是一个数组,那么像你一样使用 implode$out

于 2013-03-28T15:59:24.733 回答
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             
于 2013-03-28T16:01:46.407 回答
1

一般来说,您可以直接将 json_encode 与您的数据一起使用,而无需“内爆”它或类似的东西。

如果 $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 中的一个快捷方式,意思是“将它推送到我的数组上”。它实际上是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>');
}

最后,您的表格行不必一个数组,除非那是您想要的。

于 2013-03-28T16:16:15.163 回答