2010-05-17 77 views
2

问候,的Javascript,AJAX,延长PHP会话超时,银行超时

我有以下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评论定时在这里。我尝试了几个不同的东西,无济于事。另外,代码调用此块如下:

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

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

谢谢!

+0

以此为教训;并非您在SO上找到的所有代码都是高质量的代码。这件作品其实很糟糕。 – 2010-05-17 20:12:37

回答

2

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

你需要new的原因是因为函数引用this,当没有使用new时,这将是全局作用域而不是它自己的实例。

设定定时器你只需要调用window.clearTimeout与计时器参考作为参数

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

UPDATE

通过RESET你actally意味着重启定时器?

如果是这样,只需使用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(); 
+0

你摇滚肖恩!我插入了你的改变,它完美的工作!非常感谢! – 2010-05-17 20:34:47

+0

后续问题,我怎样才能让确认窗口在5秒后自动消失并返回false?谢谢! – 2010-05-17 20:58:50

+0

使用内置的'confirm'方法时不能使用。你将不得不求助于一些提供类似功能的UI库。 – 2010-05-17 20:59:50

0

你可以用相同的参数再次执行该函数吗?