定义间隔后调用Javascript函数

时间:2014-12-28 11:34:44

标签: asp.net asp.net-mvc razor

我正在开发MVC 5 Asp.Net Razor应用程序。我希望在用户访问我的网站时每1分钟调用一次javascript函数。

Uptil现在我创建了这个:

window.setInterval(function () {

    }, (1 * 60 * 1000));

我试着把它放在_Layout中,但我猜它会在页面更改时重新加载,所以计时器再次重启。谁能告诉我应该放置这个功能的确切位置?

用户在访问我的网站时正在更改页面。放置此功能的最佳位置是什么,以便在1分钟后一次又一次地调用它?

1 个答案:

答案 0 :(得分:0)

每次访问者都会在您的站点中链接到新的ASP.NET MVC呈现页面时,浏览器将从您的站点下载新的HTML文档,并从头开始执行所有链接的JavaScript。没有地方你可以按原样放置你的代码,以便尽管页面重新加载它会每分钟执行一次。

如果间隔一分钟的事件是必不可少的功能,那么我能想到的最好的解决方法是在浏览器的本地存储中存储一些标志或cookie来说明事件何时应该触发。

// The code you want to execute every minute
var workFunction = function () { /* Your code here */ };

// Find any currently set event timeout by a previous page,
// or default to now
var getNextEvent = function () { 
    var nextStored = localStorage.nextEvent;
    var now = (new Date()).getTime();
    var when = nextStored != null ? (nextStored - now) : 0;
    if (when <= 0) {
        when = 0;
    }
}    

var timeoutHandler = function () {
    // Do the work
    workFunction();

    // Set the next event for if the browser *doesn't* navigate
    setTimeout(timeoutHandler, 60000);

    // Record when the next event should fire,
    // in case the browser navigates in the mean time
    var nextToStore = (new Date()).getTime() + 60000;
    localStorage.nextEvent = nextToStore;
}

// Start the events off
setTimeout(timeoutHandler, getNextEvent());