проблема setTimeout с Google Feed API - PullRequest
       18

проблема setTimeout с Google Feed API

0 голосов
/ 05 августа 2011

Я использовал API фидов Google для чтения URL фида Rss и отображения заголовка. Когда я вызываю функцию get_rss1_feeds напрямую, она отлично работает. Но когда я вызываю его с помощью setTimeout или setInterval, я вижу только пустой экран, и страница не перестает загружаться!

<script src="http://www.google.com/jsapi?key=AIzaSyA5m1Nc8ws2BbmPRwKu5gFradvD_hgq6G0" type="text/javascript"></script>     
<script type="text/javascript" src="jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="query.mobile-1.0a4.1.min.js"></script>
<script type="text/javascript" src="jsRss.js"></script>
<script type="text/javascript" src="notification.js"></script>

Мои уведомления.js

/** global variable **/
var Rsstitle;
/** end global variable **/

document.addEventListener("deviceready", onDeviceReady, false);
// PhoneGap is ready
//
function onDeviceReady() {
// Empty
}

function get_rss1_feeds() {
    console.log('test');               // this is being outputted
    var Rss1_title = getRss("http://yofreesamples.com/category/free-coupons/feed/?type=rss", function(entry_title) {    
        if(Rsstitle != entry_title)
        Rsstitle = entry_title;
        console.log('test1',Rsstitle); // not working
    });   
}

//get_rss1_feeds() works fine
setTimeout(get_rss1_feeds,5000); 

Мой файл jsRss.js

    function getRss(url, callback){
    console.log('test2');            // this is being outputted 
    if(url == null) return false;
    google.load("feeds", "1");
    // Our callback function, for when a feed is loaded.
    function feedLoaded(result) {
        if (!result.error) {
            var entry = result.feed.entries[0];
            var entry_title = entry.title; // need to get this value
            callback && callback(entry_title);        
        }
    }
    function Load() {
        // Create a feed instance that will grab feed.
        var feed = new google.feeds.Feed(url);
        // Calling load sends the request off.  It requires a callback function.
        feed.load(feedLoaded);      
    }    
    google.setOnLoadCallback(Load);             
}

1 Ответ

1 голос
/ 05 августа 2011

Вам нужно установить точку останова в функции getRss() и посмотреть, что происходит, когда она вызывается из setTimeout().Я предполагаю, что что-то в этой функции имеет проблему с областью видимости и недоступно из глобальной области, в которой запускается setTimeout, но доступно из обычной области, в которой вы пытались. Это могут быть переменные или функции, которые не являютсяне доступно.

Иногда это может произойти, если функции объявлены внутри другой функции и, следовательно, на самом деле не доступны глобально.

К вашему сведению, этот блок кода очень странный:

var Rsstitle;
if(Rsstitle != entry_title)         
Rsstitle = entry_title;

Вы можете заменить его следующим:

var Rsstitle = entry_title;
...