我正在构建一个假设回答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;
以及如何在这种特定情况下使用它?
答案 0 :(得分:1)
循环的第一行仅将从 $ list 检索到的最后一行分配给 $ out 。其次,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>');
}
最后,你的表格行不会将作为一个数组,除非这是你想要的。