我有一个页面显示使用Google API的RSS源,并且存在初始化问题。当页面加载时,不显示新闻项目。如果我刷新页面,那么它们就是。
我在HTML中有这个
<div id="snews" style="position:relative; width: 100%; height: 100%; overflow-y: auto; overflow-x: hidden;">
<div id='feed-control'>
<span style='color:#676767;font-size:11px;margin:10px;padding:4px;'>Loading...</span>
</div>
<script type='text/javascript'>
// Load the feeds API and set the onload callback.
google.load('feeds', '1');
load_rss("http://www.catholicnewsagency.com/rss/news.xml");
google.setOnLoadCallback(load_rss);
</script>
</div> <!-- End snews -->
Google API调用加载新闻项目都在此功能中。
// Load RSS
function load_rss(url) {
google.load("feeds", "1");
var feed = new google.feeds.Feed(url);
var entry_target = "viewer";
/*************************************
Feed Title feed.title
Feed Link feed.link
Feed Description feed.description
Feed Author feed.author
Feed Entries feed.entries[]
Entry Title feed.title
Entry Link feed.link
Entry Content entry.content
Content Snippet entry.contentSnippet
Published Date entry.publishedDate
Categories entry.categories[]
**************************************/
feed.setNumEntries(10);
feed.load(function(result) {
$('#feed-control').append('<table id="rssentries"></table>');
if (!result.error) {
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
var entrydate = new Date(entry.publishedDate);
var entry_yr = entrydate.getFullYear();
var entry_mon = entrydate.getMonth()+1;
if (parseInt(entry_mon) < 10 ) { entry_mon = "0"+entry_mon; }
var entry_day = entrydate.getDate();
if (parseInt(entry_day) < 10 ) { entry_day = "0"+entry_day; }
var entry_date= entry_mon + "." + entry_day + ': ';
$('#rssentries').append('<tr><td>'+entry_date+'<a href="'+entry.link+'" target="'+entry_target+'" onclick="show_title(\''+escape(entry.title)+'\');">'+entry.title+'</a></td></tr>');
}
}
});
}
第一次显示的新闻项目应该怎样修复?
答案 0 :(得分:0)
首先,当您不需要时,不要在页面上两次调用load_rss
功能。
load_rss("http://www.example.com/rss/news.xml");
google.setOnLoadCallback(load_rss);
删除单独的load_rss
电话并离开google.setOnLoadCallback(load_rss);
,因为它会在准备好触发该功能时触发。
Calling the onLoad handler
上实现
.setOnLoadCallback(callback)
是一个静态函数,它注册一个包含此调用的页面加载时要调用的指定处理函数,其中回调是在加载包含文档并且API可以使用时调用的必需函数(例如,在onLoad
之后。此功能在google名称空间(即google.setOnLoadCallback(callback);
)
然后前往您的函数声明并将前几行更改为以下内容:
function load_rss() {
var url = "http://www.example.com/rss/news.xml";
var feed = new google.feeds.Feed(url);
在这里,您会注意删除google.load('feeds', '1');
之前已经调过的setOnLoadCallback
。
除非你想要“加载......”总是显示,否则你应该换掉内容而不是像这样添加:
$('#feed-control').html('<table id="rssentries"></table>');
答案 1 :(得分:0)
问题是容器元素尚未加载。我不得不把脚本放在document.ready。