我不明白这个javascript函数是如何执行的

时间:2011-06-21 17:44:45

标签: javascript jquery

当我运行以下代码时,警报弹出窗口显示为undefined。我认为它会返回true或false。请有人解释checkLoginStatus()函数如何执行。感谢。

function checkLoginStatus() {
$.get("func.php", {op:'login_status', r:Math.random()}, function(data) {
    if (data == "Yes") {
        showSalesView();
        return true;
    } else {
        loginView();
        return false;
    }   
});

}

alert(checkLoginStatus());

4 个答案:

答案 0 :(得分:7)

有一些错误。

一,你在函数中执行异步调用,所以当调用返回时,checkLoginStatus已经返回。它基本上是这样的:

function checkLoginStatus() {
    $.get("func.php", {
        op: 'login_status',
        r: Math.random()
    }, function(data) {
        if (data == "Yes") {
            showSalesView();
            return true;
        } else {
            loginView();
            return false;
        }
    });
    // return undefined
}

其次,你在另一个函数的回调中返回,因此return会影响回调到$.get

的返回值

您想要使用回调。所以,

function checkLoginStatus(callback) {
    $.get("func.php", {
        op: 'login_status',
        r: Math.random()
    }, function(data) {
        if (data == "Yes") {
            showSalesView();
            callback(true);
        } else {
            loginView();
            callback(false);
        }
    });
}

然后

checkLoginStatus(function(result) {
    alert(result);
});

答案 1 :(得分:1)

AJAX调用是异步的,因此当响应到达时,您指定为回调的函数将被执行。代码不会等待响应退出checkLoginStatus函数。

您可以使用回调方法显示结果:

function checkLoginStatus(callback) {
  $.get("func.php", {op:'login_status', r:Math.random()}, function(data) {
    if (data == "Yes") {
      showSalesView();
      callback(true);
    } else {
      loginView();
      callback(false);
    }   
  });
}

checkLoginStatus(function(status){ alert(status); });

答案 2 :(得分:1)

返回的bool由$.get函数回调返回,而不是checkLoginStatus

function checkLoginStatus() {
    $.get("func.php", {op:'login_status', r:Math.random()}, 

        // Start Callback Function
        function(data) {
            if (data == "Yes") {
                showSalesView();
                return true;
            } else {
                loginView();
                return false;
            } 
        // End Callback Function

    });
}

答案 3 :(得分:1)

你看到的是从.get()函数返回的undefined(void), 请注意.get函数调用包含另一个函数作为第三个参数(第一个是url,第二个是anon对象),它是.get函数结果的“回调”,稍后在结果被调用时调用从服务器返回。