0

スクリプトに次の行があり、JSON から取得したニュース フィード データに基づいて文字列を作成します。

 var buildstring = "<table><tr><img src=" + obj.value.items[x]["media:content"].url + "> <b>" + obj.value.items[x].title + "</b><br /><td>" + obj.value.items[x].description.content + "</td></tr></table><br />";

一般的には問題なく動作しますが、1 つだけ例外があります。時々解析されるフィードには、特定のタイトルと説明に関連付けられた画像ファイルがありません。その場合、スクリプト全体が失敗します。

フィード内の欠落している項目をスキップして、そこにある項目から文字列を作成するスクリプトを取得する方法はありますか? たとえば、ストーリーの画像ファイルがない場合、文字列はタイトルと説明だけで構成されますか? 典型的なケースでは、5 から 10 のストーリーを取り上げます。それらすべてに 3 つの要素 (画像、タイトル、説明.コンテンツ) があれば、すべて問題ありません。1 つのストーリーで画像ファイルが欠落している場合、何も取得できません。

アドバイスや支援をありがとう。

編集:

より完全なコード:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"> </script><script type="text/javascript">

function pipeCallback(obj) {
document.write("<div id=testdiv><b>LATEST NEWS</b><hr>");
var x;
for (x = 0; x < obj.count ; x++)
{
var imageurl = obj.value.items[x]["media:content"].url ? obj.value.items[x]["media:content"].url : "http://static.jquery.com/org/images/project/jquery-project-sm.png";
var buildstring = "<table><tr><img src=" + imageurl + "> <b>" + obj.value.items[x].title + "</b><br /><td>" + obj.value.items[x].description.content + "</td></tr></table><br />";
document.write(buildstring);
buildstring = null;
}
document.write("</div>");

}
</script>
4

2 に答える 2

0

最良のオプションは、単にプレースホルダーを含めることですよね? したがって、画像がない場合は、プレースホルダーが表示されます...

これは次のように達成されます。

var imageurl = obj.value.items[x]["media:content"].url ? obj.value.items[x]["media:content"].url : "http://link.to.default/image.png";
var buildstring = "<table><tr><img src=" + imageurl  + "> <b>" + obj.value.items[x].title + "</b><br /><td>" + obj.value.items[x].description.content + "</td></tr></table><br />";
于 2012-08-31T04:10:05.593 に答える
0

三項式を使用して文字列を作成できます。

var textOnly = "<b>" + obj.value.items[x].title + "</b><br /><td>" + obj.value.items[x].description.content + "</td></tr></table><br />";
var buildstring = (typeof obj.value.items[x]["media:content"] == 'undefined') ? 
    "<table><tr><td><img src=" + obj.value.items[x]["media:content"].url + "></td>" + textOnly 
    : "<table<tr><td></td>" + textOnly;

明らかに、これは非常に醜く高速になります。そのため、クライアント側のテンプレート ( JQuery templatingUnderscore.jsMustache.jsHandlebars.jsなどから選択してください) が発明されました。

これらにより、データをマークアップから分離できるため、次のように記述できます。

var template = "<table><tr><td><img src='{{ image }}' /></td><td>{{ title }}</td><td>{{ description }}</td></tr></table>";

そして、データ + テンプレートから HTML を取得できます。

var html = Mustache.render(template, obj.value.items[x]);
于 2012-08-31T04:06:47.637 に答える