Javascript值在jquery.post之外更改

时间:2014-03-24 13:36:57

标签: javascript jquery

我有一个令人毛骨悚然的错误让我疯狂了一段时间。我有以下代码:

function isLoggedIn() {

    var loggedIn = false;

    var requestData = {
        action: 'explore-webdesign-is-loggedin',
        request_url: location.protocol + '//' + location.host + location.pathname,
        async: false,
        data: null
    };
    jQuery.post(ajaxurl, requestData, function(data) {

        var dataObj = JSON.parse(data);
        if (dataObj.success === true) {
            loggedIn = true;       
            alert("1.) " + loggedIn);
        }
    });    
    alert("2.) " + loggedIn);
    return loggedIn; 
};

Javascript吐出两个警报,这很好,但是第一个警告说' 1。)true'而第二个给了我' 2。)false'。发生了什么事?

1 个答案:

答案 0 :(得分:2)

AJAX请求是异步 - 当AJAX正在进行时,您的最终警报正在执行 - 一旦AJAX完成,第一个警报就会完成(因此,为什么它在回调中)。

你没有像你想要的那样从异步方法return,而是在AJAX完成后你将传递一个回调函数来执行:

function isLoggedIn(callback) {
     ...
     ...
     jQuery.post(ajaxurl, requestData, function(data) {
         ...
         ...
         if (dataObj.success === true) {
             loggedIn = true;       
             callback(loggedIn);
         }
     });
}

然后这样打电话:

isLoggedIn(function(data) {
    if (data) //user is logged in
});