0

Google フィード API を使用して Rss フィードの URL を読み取り、タイトルを表示しました。関数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>

私の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);             
}
4

1 に答える 1

1

getRss()関数にブレークポイントを設定し、 から呼び出されたときに何が起こっているかを確認する必要がありますsetTimeout()。私の推測では、その関数の何かにスコープの問題があり、setTimeout が実行されるグローバル スコープからは利用できませんが、試した通常のスコープからは利用できます。利用できません。

これは、関数が別の関数内で宣言されているため、実際にはグローバルに使用できない場合に発生することがあります。

参考までに、このコード ブロックは非常に奇妙です。

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

これを次のように置き換えることができます。

var Rsstitle = entry_title;
于 2011-08-04T21:10:59.010 に答える