Не в состоянии хранить значение внутри глобальной переменной - PullRequest
0 голосов
/ 05 августа 2011

Я читаю фид Rss с использованием метода setInterval и отображаю уведомление для пользователей. Я хочу убедиться, что я сохраняю последний заголовок фида, чтобы пользователь не получал несколько уведомлений об одном и том же заголовке снова.Поэтому я объявляю глобальную переменную global_Rsstitle в верхней части моего messages.js .Теперь я пытаюсь передать значение entry_title в глобальную переменную, значение не сохраняется в глобальной переменной после вызова метода setinterval.Есть ли лучший способ сохранить значение entry_title и проверять каждый раз, когда вызывается метод setInterval, чтобы избежать многократного уведомления об одном и том же заголовке.

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

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

Мой файл 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();             
}

Ответы [ 3 ]

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

Разве вы не должны устанавливать global_Rsstitle, а не Rsstitle?

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
    });   
}

UPDATE

Вы понимаете, что не можете использовать эту переменную, пока ответ не вернется, верно?

Другими словами, вы не можете сделать это:

get_rss1_feed();
alert(global_Rsstitle);

потому что предупреждение будет сработать до того, как будет прочитан канал и назначена переменная. Чтобы сделать его еще хуже, вы задерживаете выполнение с вашим интервалом.

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

Вы определяете переменную с именем global_Rsstitle;, но в своем коде вы используете Rsstitle.Это две разные вещи

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

После объявления var global_Rsstitle; вы никогда не назначаете ему ничего. Это должно быть на LHS какого-то выражения. Добавление global_ к переменной не делает ее глобальной; определение его вне функции делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...