2009-08-22 96 views
1

我有一个“在线用户”列表,我每30秒用prototype.js中的Ajax.PeriodicalUpdater刷新一次。在用户注销时停止Prototype.js Ajax.PeriodicalUpdater

存在一个问题,即如果用户有两个打开站点的选项卡/窗口,则在其中一个登出时,PeriodicalUpdater不会取消。

这意味着PeriodicalUpdater会更新我的块元素和整个登录页面,因为我有一个平稳的身份验证,它会重定向到该页面。

我正在使用PHP会话,我真的无法让我的头在这一个。

你们中的任何人都可以指引我朝着正确的方向吗?

回答

0

我会考虑更改返回结果的方法,以便它不需要通过身份验证的会话来访问它,但它会返回只有当有认证会话时才有效的信息。否则,它会返回一个值,指示更新应该停止,并在您的在线用户的块中显示一条适合的消息。这意味着您可能需要返回JSON - 而不是一件坏事 - 并且将其作为JSON的一部分与HTML片段结合使用,或者仅从JSON数据构建客户端上的HTML(更好的IMO自该视图是标记的正确位置)。

+0

当然!男人,你是明星。我的访问控制类中已经有一个排除文件列表。 我将onlineList.php添加到我的$ excludedPages数组中,将整个页面包装在if(isset($ _ SESSION ['user_id'])) - 一切都很好。 非常感谢! – Preben 2009-08-22 13:11:45

0

在创建PE,保持对它的引用:

// At global scope, or ideally if you have a namespaced object, use that 
var thePE; 

// Where you create the PE 
thePE = new PeriodicalExecuter(yourFunction, 3); 

当你想让它停下来,告诉它停止(假设它已经启动):

if (thePE) { 
    thePE.stop(); 
    thePE = undefined; 
} 

( PeriodicalExecuter#停止文档here。)

+0

感谢您的提示!我试图弄清楚,何时何地我真的希望它停止。有什么方法可以检查我的PHP会话是否仍然在JavaScript中处于活动状态? – Preben 2009-08-22 13:05:06