我有一个“在线用户”列表,我每隔30秒刷新一次来自prototype.js的Ajax.PeriodicalUpdater。
存在一个问题,如果用户打开了两个标签/窗口,并在其中一个标签中注销,则不会取消PeriodicalUpdater。
这意味着PeriodicalUpdater使用整个登录页面更新我的块元素,因为我有一个重定向的身份验证,重定向到该页面。
我正在使用PHP会话,我真的无法直截了当地讨论这个问题。
你们中的任何人能指出我正确的方向吗?
答案 0 :(得分: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 #stop docs here。)
答案 1 :(得分:0)
我会考虑更改返回结果的方法,以便它不需要经过身份验证的会话来访问它,但只有在经过身份验证的会话时才会返回有效信息。否则,它返回一个值,表示更新应该停止,并在您的在线用户块中显示一条合适的消息。这意味着您可能需要返回JSON而不是坏事 - 并将其与作为JSON的一部分的HTML片段组合,或者只是从JSON数据构建客户端上的HTML(更好的IMO,因为视图是标记的正确位置。