Javascript,AJAX,扩展PHP会话超时,银行超时

时间:2010-05-17 20:00:03

标签: javascript

问候,

我有以下JS代码:

var reloadTimer = function (options) {
  var seconds = options.seconds || 0,
      logoutURL = options.logoutURL,
      message = options.message;

  this.start = function () {
    setTimeout(function (){
      if ( confirm(message) ) {
        // RESET TIMER HERE
        $.get("renewSession.php"); 

      } else {
        window.location.href = logoutURL;
      }
    }, seconds * 1000);
  }

  return this;
};

我想重置计时器,我在这里有RESET TIMER的评论。我尝试了一些不同的东西无济于事。调用此块的代码如下:

var timer = reloadTimer({  seconds:20, logoutURL: 'logout.php',
                     message:'Do you want to stay logged in?'});
timer.start();

代码可能看起来很熟悉,因为我在SO上发现它: - )

谢谢!

2 个答案:

答案 0 :(得分:2)

首先,您需要在new中使用var timer = new reloadTimer运算符,并且还应将reloadTimer大写为ReloadTimer,以表示它需要与new一起使用。

您需要new的原因是因为函数引用了this,而在没有new的情况下使用时,这将是全局范围,而不是它自己的实例。

要重置计时器,只需使用计时器参考作为参数

调用window.clearTimeout
var timer = window.setTimeout(....
...
window.clearTimeout(timer);

更新

通过RESET你的意思是重启计时器吗?

如果是,请使用setInterval代替setTimeout

更新2

这是一个稍微好一点的方法(如果你仍然希望使用这样的类来封装一些如此微不足道的东西)

var ReloadTimer = function(options){
    var seconds = options.seconds || 0, logoutURL = options.logoutURL, message = options.message;
    var timer;
    return {
        start: function(){
            timer = setInterval(function(){
                if (confirm(message)) {
                    $.get("renewSession.php");
                }
                else {
                    clearInterval(timer);
                    window.location.href = logoutURL;
                }
            }, seconds * 1000);
        }
    };
};
var myTimer = new ReloadTimer({
    seconds: 20,
    logoutURL: 'logout.php',
    message: 'Do you want to stay logged in?'
});
myTimer.start();

答案 1 :(得分:0)

您可以使用相同的参数再次执行该功能吗?