似乎无法验证是否为真,仅为假?

时间:2014-11-24 20:26:15

标签: jquery

我正在做一个简单的检查,看看用户是否已登录。继承人为我做的这个功能:

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()部分呢?

3 个答案:

答案 0 :(得分:1)

Probaly从服务器代码到javascript的转换错误。 尝试这样的事情:

if (checkAuth() == "false")
{}

调试代码以查看如何在javascript中解释checkAuth

答案 1 :(得分:1)

您可能需要在checkAuth函数中返回true。 return true;return false;

失败时返回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");
        }
    });
});