jsonp 呼び出しから json データを取得しています。データは順調に戻ってきています。1 つのデータ要素は、何らかの 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 は画像とタイトルを含めて正しく表示されますが、「説明」行は次のように出力されます: [object Text]
$.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 ソリューションよりも複雑でした。
問題はサーバー側で始まり、不正な形式の html が送信されました。
header('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 を使用してスラッシュを削除するという 2 段階のプロセスにより、「説明」は HTML ページ上のすべてのテキストと HTML 要素を適切に表示します。