在认证后重新保存JS回调函数的位置?

时间:2012-04-23 05:40:07

标签: javascript jquery ajax

我有一个动作,我只想允许经过身份验证的用户。如果尚未登录的用户单击此链接,则Web服务器将返回未登录的响应。然后我将登录表单呈现在浮动的“灯箱”div中。如果用户成功登录,我希望浏览器重试该操作。

我找不到存储我想要重试的功能的好地方。目前,我将它附加到一个看起来非常h​​acky的全局对象。 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?
}

0 个答案:

没有答案