我从jsonp调用中获取json数据。数据恢复正常。一个数据元素是字符串形式,其中包含一些html(“p”标记,“a”标记)。我正在尝试在jQuery对话框中输出此元素(图片描述)。出于某种原因,我无法将其渲染为html,无论我是否使用$ .parseHTML。
代码段:
var image = data.image;
var title = data.title;
var id = data.id;
var description = $.parseHTML( data.description );
var media = data.media;
var secret = data.secret;
if(media == "photo"){
var string = "<div id=\"picturebox\" class=\"picturebox\">\n";
string += " <img src=\""+image + "\" id=\"photo_"+id+"\" />\n";
string += " <h2>" + title + "</h2>\n";
string += " <p>" + description + "</p>\n";
string += "</div>\n";
$('#gbFullPic').html(string);
}
虽然动态生成的div正确显示,包括图像和标题,但“description”行输出如下: [对象文字]
如果我删除$ .parseHTML,输出如下所示:
Bird of paradise growing in south Florida.<p><a href="http://www.popgnology.com/guestbook.php">ACME Adventures</a></p>
如果我的html输出没有显示实际的html标签,那当然没问题。我做错了什么?
更新(第2次修订): 我以前的解决方案不完整。问题比单个jquery或javascript解决方案更复杂。
问题始于服务器端,通过
发送的格式错误的htmlheader('content-type: application/json; charset=utf-8');
echo $cid . '('.json_encode($data).')';
在服务器端(PHP),我不得不调整我的“描述”项,就像这样(注意添加htmlspecialchars_decode和addslashes包装器):
if($k == "description"){
$data["$k"] = addslashes(htmlspecialchars_decode($v));
}
else{
$data["$k"] = $v;
}
然后,这个javascript正确呈现了json数据项:
var description = data.description.replace('\\','');
通过在服务器页面上更正传递格式的两步过程,以及在客户端使用.replace剥离斜杠,“description”正确显示html页面上的所有text和html元素。
答案 0 :(得分:4)
尝试var description = $($.parseHTML(data.description)).html();
jQuery的parseHTML返回一个DOM节点数组。然后你可以将它们插入到DOM中,但在你的情况下你应该得到他们的.html()
并将它添加到你的字符串中。
答案 1 :(得分:4)
我的猜测是你的data.description被转义,方法parseHTML不会处理它。查看此帖子以获得解决方案:
Javascript decoding html entities
var text = '<p>name</p><p><span style="font-size:xx-small;">ajde</span></p><p><em>da</em></p>';
var decoded = $('<div/>').html(text).text();
alert(decoded);
所以在你的情况下:
var decoded = $('<div/>').html(data.description).text();
$('#gbFullPic').html(decoded);