我正在从jsonp调用中获取json数据。数据恢复正常。一个数据元素以字符串的形式存在,其中包含一些html(“p”标记,“a”标记)。我试图在jquery对话框中输出这个元素(图片描述)。出于某种原因,无论是否使用$.parsehtml,我都无法将其呈现为HTML。
代码段:
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标记,那就没问题了。我做错什么了?
更新(第二次修订):
我以前的解决方案是不完整的。这个问题比单一的jquery或javascript解决方案更复杂。
问题从服务器端开始,通过
header('content-type: application/json; charset=utf-8');
echo $cid . '('.json_encode($data).')';
在服务器端(php),我必须调整“description”项的条件,就像这样(注意添加了htmlspecialchars_decode和addslashes包装器):
if($k == "description"){
$data["$k"] = addslashes(htmlspecialchars_decode($v));
}
else{
$data["$k"] = $v;
}
然后,这个javascript正确地呈现了json数据项:
var description = data.description.replace('\\','');
通过在服务器页面上更正传递格式和在客户端使用.replace取消斜杠的两步过程,“描述”可以正确地显示HTML页面上的所有文本和HTML元素。
最佳答案
我的猜测是,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);