Функции обратного вызова JavaScript и Google Feed API

Я пытаюсь внедрить несколько каналов в мой сайт, используя функцию заполнения. Раньше у меня были идентичные блоки кода JavaScript на моей странице (по одному для каждого канала), но в интересах хорошего (или лучшего) кодера я решил вставить повторяющийся код во внешний файл сценария и запустить его с различными параметрами вместо.

К сожалению, каналы отказываются загружаться с моей новой реализацией, и у меня заканчиваются идеи. Я структурировал свою функцию обратного вызова на основе интересных предложений пользователя ndp в вопросе 9662168.

Итак, у меня есть следующие две функции в моем внешнем файле сценария (незначительное редактирование кода для простоты):

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 не определено (что приводит непосредственно к ошибке, которую вы видите).

Попробуйте вместо этого использовать этот скрипт (я просто следовал примеру "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);
Другие вопросы по тегам