我在网页上有一些链接,用户将用户重定向到需要登录的网页。因此,如果用户未登录,我想向他显示一个模式窗口,其中包含要登录的消息。
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;,所以当登录用户点击它时,它会将他重定向到该页面。
答案 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
}
});