我有一个只允许经过身份验证的用户的操作。如果尚未登录的用户单击此链接,Web 服务器将返回未登录响应。然后,我将登录表单显示在一个浮动的“灯箱”div 中。如果用户成功登录,我希望浏览器重试该操作。
我很难找到一个存储我想重试的功能的好地方。目前,我将它附加到一个全局对象上,这看起来很 hacky。jQuery“延迟”模式似乎适合这里,但我仍然需要在某处保留对延迟对象的引用,而且我看不到正确的位置。
建议?
下面是一些简化的代码(实际上,Ajax 响应决定了我们是显示登录表单还是确认操作):
$(function() {
$('li.secured').find('a').click(function() {
var link = this;
var action = function() { // captures 'link'
if(RootObj.IsAuthenticated() ) { // already logged in
window.location.assign( link.href );
} else {
// pass ourself in as a callback to be repeated after authentication
// Yes, this seems to work even in the midst of our own definition...
RootObj.ShowLoginForm( action );
}
return false; // don't go immediately to the new url
}
return action();
});
});
RootObj.ShowLoginForm = function( callback ) {
var lb = $('#lightbox');
if(lb.length == 0) { lb = $('<div id="lightbox" class="lightbox"></div>').appendTo('body'); }
lb.load('login.html');
RootObj.callback = callback; // is there a better place to store this callback function?
}