2011-08-05 21 views
1

setIntervalメソッドを使用してRssフィードを読んで、ユーザーに通知を表示しています。最新のフィードタイトルを格納して、ユーザーが表示しないようにしたい再度同じタイトルの複数の通知を取得します。現在の実装は、応答が返ってくるまでその変数を使用できないため動作しません。状況を悪化させるために、私は実行を遅らせています。私はコールバック関数を使用して値を取得し、その関数内で自分のチェックを行う必要があると推測しています。私はコールバックを行い、entry_titleの値を取得する方法を理解することができません。 >これは、d値を格納し、私は を必要とするので、私は、この値を取得するn個のグローバル変数 にそれを保存したり、それを送信する必要がある - 私のjsRss.jsがコールバック関数を作成して変数の値を格納する方法

function getRss(url, callback){ 
    if(url == null) return false; 

    // 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);  
    }  
    Load();    
} 

uがentry_titleを見ることができます

/** global variable **/ 

var global_Rsstitle; 

/** end global variable **/ 

function get_rss1_feeds() { 

    var Rss1_title = getRss("http://rss.cnn.com/rss/cnn_topstories.rss", function(entry_title) { 
     if(global_Rsstitle != entry_title) 
     global_Rsstitle = entry_title; 
     console.log('test',global_Rsstitle); // the value is outputed but global var is not working 
    }); 
console.log('test1',global_Rsstitle); // outputted as undefined ?? 
    } 

    google.load("feeds", "1"); 
    google.setOnLoadCallback(function() { setInterval(get_rss1_feeds, 5000); }); 

他のfnsに引数として を入力して、値 を維持し、次回のsetIntervalが発生したときには 私は新しい値を取得するので、それを比較して確認することができます。 n同じものをユーザに表示しない場合

答えて

1
google.load("feeds", "1"); 
google.setOnLoadCallback(function() { 
    var oldTitle = '', 
     newTitle = '', 
     getRss = function (url, callback) { 
      (url) && (function (url) { 
       var feed = new google.feeds.Feed(url); 

       feed.load(function (result) { 
        (!result.error && callback) && (callback(result.feed.entries[0].title)); 
       }); 
      }(url)); 
     }; 

    setInterval(function() { 
     getRss(
      'http://rss.cnn.com/rss/cnn_topstories.rss', 
      function (title) { 
       newTitle = title; 
       if(oldTitle !== newTitle) { 
        oldTitle = newTitle; 
        console.log('oldTitle: ', oldTitle); 
       } 
       console.log('newTitle: ', newTitle); 
      } 
     ); 
    }, 5000); 
}); 
+0

これは非常に興味深い方法です。私がしなければならないことは、oldTitle = newTitleと比較してnewtitleを表示することです。おかげでショーン! –

+0

簡単な質問2つの異なるRss Urlを使用したい場合はどうすればいいですか?私は別の関数を作成し、setIntervalメソッドの中で正しく呼び出すことができます。また、最初のUR1にはvar Rss1_title、2番目にはvar Rss2_titleを使用してトラックを維持することもできます。 –

+0

私は別のURLを使用します。 http://rss.cnn.com/rss/cnn_latest.rssのように最新のフィードが表示されていませんか? GoogleフィードのAPIに問題がありますか? –

関連する問題