2012-09-04 34 views
2

我想實現使用div填充功能到我的網站幾個飼料。之前,我的頁面上有相同的JavaScript代碼塊(每個Feed有一個代碼塊),但爲了成爲一個好的(或更好的)編碼器,我決定將重複代碼粘貼到外部腳本文件中並使用不同的參數運行它代替。JavaScript回調函數和谷歌飼料API

不幸的是,這些提要拒絕加載我的新實現,並且我的想法已經不多了。我根據question 9662168中用戶ndp的有趣建議構建了我的回調函數。

所以,我有我的外部腳本文件中的以下兩個函數(小碼密文爲簡單起見):

function populateRSSFeed(divID) { 
    var targetDiv = document.getElementById(divID); 
    return function callback(result) { 
     if (!result.error) { 
      var container = document.getElementById(targetDiv); 
      var list = document.createElement('ul'); 
      <snip: div-population code here> 
      container.appendChild(list); 
     } 
     else 
      alert('Error fetching feeds!'); 
    } 
} 


function initializeRSSFeed(callback, targetFeed) { 
    google.load('feeds','1'); 
    var feed = new google.feeds.Feed(targetFeed); 
    var numEntries = 3; 
    feed.setNumEntries(numEntries); 
    feed.load(callback); 
} 

這些功能被稱爲在我的HTML如下:

<script> 
    var callback = populateRSSFeed('feed-list-wrapper-1'); 
    initializeRSSFeed(callback, 'http://rss.cnn.com/rss/cnn_topstories.rss'); 
</script> 

的我收到的錯誤消息讓我認爲在進料加載階段出現問題,但我無法確定原因。

Uncaught TypeError: Cannot read property 'Feed' of undefined 

你們認爲什麼?

回答

1

看起來您並未使用setOnLoadCallback來等待Google腳本加載。這將解釋爲什麼google.feeds未定義(直接導致您看到的錯誤)。

嘗試使用此腳本代替(我只是遵循Developers' Guide中的「Hello World」示例)。

google.load('feeds','1'); 
function onGoogleReady() { 
    var callback = populateRSSFeed('feed-list-wrapper-1'); 
    initializeRSSFeed(callback, 'http://rss.cnn.com/rss/cnn_topstories.rss'); 
} 
google.setOnLoadCallback(onGoogleReady); 
+1

對不起,我遲到的回覆。你的建議很重要 - 我完全忘記了重新配置「setOnLoadCallback」屬性。您還鼓勵我以更有效的方式重組我的代碼。謝謝! – SamuelMS