我想用jquery ajax调用一个php来执行一些数据库事务,然后返回2个链接列表。所以我必须将这两个链接列表传递回jquery,这样才能显示网页左侧的列表1和右侧的列表2。
我在单独的数组中创建了列表,我用json_encode发送回jquery但是我注意到它逃脱了所有的html字符。
<a>dog</a> became <a>dog<\/a>
所以当我在html中显示列表时,他们不再是链接了。
如何将返回的数组中的html代码保存到jquery?
编辑:如果你想从php分割数据以便jquery可以在html中的不同位置显示它们,这是正确的方法吗?
// list 1
while($row = mysqli_fetch_assoc($saved_tags))
{
$display_saved_tags[] = "<a id='showtag' href='answer.php?id=" . $row['id'] . "'>" . $row['name'] . "</a><br />";
}
// list 2
while($row = mysqli_fetch_assoc($related_tags))
{
$display_related_tags[] = "<a id='showtag' href='answer.php?id=" . $row['id'] . "'>" . $row['name'] . "</a><br />";
}
// return lists to jquery
echo json_encode('display_saved_tags' => $display_saved_tags, 'display_related_tags' => $display_related_tags));
答案 0 :(得分:6)
json_encode
的转义字符与HTML输出直接冲突。我遇到了同样的问题,但当时决定使用替代解决方案。我只是想到你也许可以这样做:
$data = new stdClass();
$data->html1 = base64_encode('<h1>html in here</h1>');
$data->html2 = base64_encode('<p><strong>more html</strong></p>');
echo json_encode($data);
在前端:
callbackFunction(json) {
alert(base64_decode(json.html1));
alert(base64_decode(json.html2));
}
你需要base64_decode和utf8_decode的javascript实现,可以在以下位置找到: http://phpjs.org/functions/base64_decode:357
答案 1 :(得分:0)
使用可以使用以下函数在读取或发送到浏览器时取消字符:
html_entity_decode('your response here');
另外,因为您使用的是json_encode,请确保您的代码中不需要以下功能:
json_decode