我有一个动作,我只想允许经过身份验证的用户。如果尚未登录的用户单击此链接,则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?
}