2

div-populating関数を使用して、自分のサイトにいくつかのフィードを実装しようとしています。以前は、ページ全体に同一のJavaScriptコードブロック(フィードごとに1つ)がありましたが、優れた(またはより優れた)コーダーになるために、反復コードを外部スクリプトファイルに貼り付けて、さまざまなパラメーターで実行することにしました。代わりは。

残念ながら、フィードは私の新しい実装でロードすることを拒否し、私はアイデアを使い果たしています。質問9662168のユーザーndpの興味深い提案に基づいてコールバック関数を構成しました。

したがって、外部スクリプトファイルには次の2つの関数があります(簡単にするためにマイナーコードの編集)。

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

皆さんはどう思いますか?

4

1 に答える 1

1

setOnLoadCallbackGoogleスクリプトが読み込まれるのを待つために使用していないようです。それはなぜgoogle.feedsが定義されていないのかを説明します(あなたが見ているエラーに直接つながります)。

代わりにこのスクリプトを使用してみてください(開発者ガイドの「HelloWorld 」の例に従っただけです)。

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);
于 2012-09-04T21:13:01.013 に答える