如果会话已过期(从JSP检查会话过期并有条件地包含onload脚本),则生成此onload脚本以关闭弹出窗口的JavaScript响应。
你认为这是一个好方法吗?对于这种情况,最佳实践是什么?
注:我不允许使用AJAX。
setInterval(function(){
$.get("loggedin.php", function(result) {
if (!result.isLoggedIn)
window.close();
});
}, 30000);
这个脚本假设您正在使用jQuery框架来快速开发JavaScript解决方案。它还使用JSON(JavaScript对象表示法)来测试从loggedin.php文件返回的值。
底线是,您需要使用AJAX。告诉你的老板没有其他办法。如果他仍然不明白,请让他试着在不使用数学的情况下平衡支票簿。
最好的方法是使用XMLHTTP请求来检查登录状态,如果需要的话就关闭它们 - 定期执行此操作。
敏锐的读者(也就是每个人)会注意到这是一个AJAX请求,但如果你这样说,那么可能会被接受,因为那些规定你“不允许使用AJAX”的人显然是白痴。
setTimeout
在若干分钟(或任何你想要的时间)之后调用一个函数。这将通过 AJAX 检查最近的活动并关闭弹出窗口,如果你确定会话已过期。如果没有过期,再次使用适当调整了最近活动的新时间调用setTimeout
。
^^ 在 AJAX 编辑之前。
好吧,既然你不能使用 AJAX,能否在 URL 中放置一些内容来告诉你它是一个弹出窗口?然后当用户点击重新加载时,你就知道不要显示登录界面。
在Web应用程序中实现模态对话框的另一种方法是:
由于模态对话框是页面源的一部分,当会话超时时,对话框将消失。这种方法不会产生支持窗口,因为发布者正在尝试解决的问题。它符合不使用AJAX的要求。
您可以手动编写这些代码,但我并不真正推荐这样做,因为需要支持各种浏览器。我建议查看Yahoo用户界面。您可以根据需要进行定制(例如:仅限模态对话框),如果要求发生变化,它还支持AJAX。
注意不要从模态对话框中生成模态对话框。
理论上,您可以通过使用隐藏的 Flash 小部件来避免 AJAX...
但更实际的做法是使用 AJAX,我认为您需要与您的老板交谈,确定这个“不使用 AJAX”规则的来源,并说服他 AJAX 是解决这个问题的最佳方式。
他是否认为实现 AJAX 会花费太多时间?如果是这样,您应该证明他是错的。他是否认为维护它将很困难?如果是这样,展示实现它的代码是多么简单,以及常用的 AJAX 库的广泛使用程度。如果您的老板是个理性的人,那么他的目标是为产品做最好的事情,您应该能够和他讲道理。
<a href='...' target='...'
来进行一些操作。除此之外,你可以通过javascript窗口、部分内容更新等方式完成弹出窗口所能实现的一切功能。我完全可以理解“不允许使用AJAX”会对这种方法造成限制,所以我并不是在批评你的设计选择,只是觉得“没有弹出窗口的设计是一种挑战”的说法完全荒谬无比 :-) - ChssPly76