我正在做一个简单的检查,看看用户是否已登录。继承人为我做的这个功能:
function checkAuth() {
var IsSignedIn = false;
$.ajax({
async: false,
global: false,
dataType:"json",
url: '/utility/SignInStatus',
success: function(result) {
IsSignedIn = (result);
console.log(IsSignedIn); // shows true
},
error: function() {
alert("you're not logged in");
}
});
console.log(IsSignedIn); // shows true when logged in, false when not.
}
如果用户已登录,它会要求服务器提供响应。如果用户已登录,则服务器仅提供响应。响应的布尔值为true
。如果用户未登录,则不会从服务器返回任何内容,这意味着$ .ajax调用的error
部分运行,IsSignedIn
变量默认为false
。
在另一个jQuery文件中,我想处理这个checkAuth()函数的结果:
$(document).on('click','a', function(event) {
if (!checkAuth()) {
return; // the alert from the error part of checkAuth() shows
}
else {
alert("yes you're logged in!"); // this never runs even if the user is logged in
}
});
即使else { }
返回true,它怎么也永远无法进入checkAuth()
部分呢?
答案 0 :(得分:1)
Probaly从服务器代码到javascript的转换错误。 尝试这样的事情:
if (checkAuth() == "false")
{}
调试代码以查看如何在javascript中解释checkAuth
答案 1 :(得分:1)
您可能需要在checkAuth函数中返回true。 return true;
或return false;
示例:
function checkAuth() {
var IsSignedIn = false;
$.ajax({
async: false,
global: false,
dataType:"json",
url: '/utility/SignInStatus',
success: function(result) {
IsSignedIn = (result);
console.log(IsSignedIn);
return true; // return true if logged in
},
error: function() {
alert("you're not logged in");
return false; // return false if not logged in
}
});
console.log(IsSignedIn);
}
答案 2 :(得分:0)
Ajax调用是 Asynchronous (第一个A),因此结果不能立即使用。并且,建议不要将async
设置为false
,因为它会冻结页面,直到服务器发出响应为止。您必须重新编写代码,以便不是等待函数中的true/false
来执行操作,而是在Ajax调用完成时执行操作并返回结果:
$(document).on('click','a', function(event) {
var IsSignedIn = false;
$.ajax({
global: false,
dataType:"json",
url: '/utility/SignInStatus',
success: function(result) {
IsSignedIn = (result);
console.log(IsSignedIn);
console.log(IsSignedIn); //<<<<<====== put your checks here!!
if (!IsSignedIn) {
alert( 'not logged in' );
} else {
alert("yes you're logged in");
}
},
error: function() {
alert("you're not logged in");
}
});
});