Google API加载的RSS Feed仅在刷新后显示,而不是首页加载

时间:2012-01-21 17:50:01

标签: rss google-api

我有一个页面显示使用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>');
          }
        }
    });
}

第一次显示的新闻项目应该怎样修复?

2 个答案:

答案 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。