我正在从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 = '&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;';
var decoded = $('<div/>').html(text).text();
alert(decoded);

所以在你的情况下:
var decoded = $('<div/>').html(data.description).text();
$('#gbFullPic').html(decoded);

08-04 22:27