2011-08-04 115 views
0

我已經使用google feed API讀取Rss供稿網址並顯示標題。當我直接調用函數get_rss1_feeds它工作正常。但是當我用setTimeout或setInterval調用它時,我只能看到空白屏幕,並且頁面不會停止加載!Google Feed API的setTimeout問題

<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> 

我notification.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

你需要設置一個斷點在getRss()功能,看看發生了什麼事情,當它從setTimeout()呼籲。我的猜測是,該函數中的某些內容有一個範圍問題,並且不能從setTimeout運行的全局範圍中獲得,但是可以從您嘗試使用的正常範圍中獲得。它可以是變量,也可以是不是函數不可用。

如果函數是在另一個函數內聲明的,並且因此實際上並不是全局可用,有時會發生這種情況。

僅供參考,這個代碼塊是非常奇怪:

var Rsstitle = entry_title; 
+0

我的console.log()的getRss()函數中,它似乎:

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

你可以用這個代替它它不在功能內部。我實際上最初的問題是從回調函數獲取值。 [鏈接到我以前的問題](http://stackoverflow.com/questions/6946711/how-to-get-the-value-from-a-callback-function)。這幾乎是這個的延續。 –

+0

一旦我每5000毫秒獲得一個值,我想確保我不會一次又一次顯示相同的標題。只是爲了避免重複! –

+0

如果'getRSS()'沒有被調用,那麼從'get_rss1_feeds()'調用它時必然會遇到某種範圍問題。把一個console.log作爲'get_rss1_feeds()'的第一行,並確保它被調用。如果你想比較這個標題和以前的標題,那麼你需要將這個聲明'var Rsstitle;'移動到頂層作用域,以便它可以是一個全局變量,它將從一個調用繼續到下一個調用。就像你現在所做的那樣,只要get_rss1_feeds()退出,它就是一個局部變量,所以它不會完成任何事情。 – jfriend00