2009-12-16 72 views
0

我想用jquery ajax调用php来执行一些数据库事情,然后返回2个链接列表。所以我必须将这两个链接列表传递回jquery,以便它可以显示页面左侧的列表1和右侧的列表2。返回带有html字符的json字符串?

我在单独的数组中创建了列表,我用json_encode发送回jquery,但我注意到它转义了所有的html字符。

<a>dog</a> became <a>dog<\/a> 

所以,当我在html中显示列表,他们werent链接了。

我该如何保存我返回的数组中的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

这将是一件PHP事情。你可以发布你的实际PHP代码,以便人们可以看到你是如何调用'json_encode'? – 2009-12-16 11:53:13

回答

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

+0

我认为它在base64和utf8中的代码有问题。它说这些功能在我使用它时没有声明。当我用netbeans调试函数的时候,似乎do {}被破坏了。删除它使声明的功能......你的计算机中有代码吗?不知道如何解决它.. – ajsie 2009-12-16 12:29:36

+0

它没有错的代码,它工作时,我把它在jQuery文档准备功能以外。它的工作就像一个魅力! – ajsie 2009-12-16 12:37:08

0

使用可以使用以下功能来读取或发送到浏览器时,未逃脱字符:因为你正在使用json_encode

html_entity_decode('your response here'); 

此外,请确保您不需要在您的代码下面的功能:

json_decode 
+0

我在php文件中使用了这个:echo html_entity_decode(json_encode($ display_saved_tags)); 但它的奇怪,它仍然逃到狗<\/a>。我可以在萤火虫中看到它。 – ajsie 2009-12-16 12:04:39