onClick等待返回值

时间:2015-04-14 20:35:09

标签: javascript jquery

我在网页上有一些链接,用户将用户重定向到需要登录的网页。因此,如果用户未登录,我想向他显示一个模式窗口,其中包含要登录的消息。

function isLoggedIn(){
        var requireLoginCheckStatusUrl="require_login.php?check_login=1";
        $.get(requireLoginCheckStatusUrl).done(function(data) {
            if(data == 2){
                var requireLoginModalUrl = "require_login.php?ajax=1";
                $.get(requireLoginModalUrl).done(function(data) {

                    $('body').prepend(data);
                    $('body').addClass('stop-scrolling');
                    return false;
                });
                }

            });


    return true;
}

正如你所看到的,函数中有两个异步调用,所以我需要以某种方式make标记来等待函数完全执行。

还有一些标签

<a href="only_for_logged_in.ph" onclick="return isLoggedIn();">Click</a>

PS。 标签链接到的页面受到保护,不会访问未登录的用户,因此您不必担心安全问题,我只需要在不重定向用户的情况下显示模态窗口,但我也想将网址保留在href =&#34;&#34;,所以当登录用户点击它时,它会将他重定向到该页面。

1 个答案:

答案 0 :(得分:0)

鉴于$.get()方法是异步的,你不能在它之后返回一个值,因为它还没有完成执行,所以你需要传递你的isLoggedIn()函数callback,并在$.get()方法调用提供给.done的回调时调用它。

以下是一个例子:

function isLoggedIn(callback) {
    var requireLoginCheckStatusUrl="require_login.php?check_login=1";
    $.get(requireLoginCheckStatusUrl).done(function(data) {
        if(data == 2){
            var requireLoginModalUrl = "require_login.php?ajax=1";
            $.get(requireLoginModalUrl).done(function(data) {
                $('body').prepend(data);
                $('body').addClass('stop-scrolling');

                // Call your callback when .get finishes working
                callback(false);
            });
        // I'm assuming that if data is not 2, the user is logged in
        } else  callback(true);
    });
}

isLoggedIn(function(result) {
    if (result) {
        // The user is logged in, do something
    } else {
        // The user is not logged in, do something else
    }
});