Javascript值在jquery.post之外改变

Javascript value changes outside jquery.post

本文关键字:改变 post 值在 jquery Javascript      更新时间:2023-09-26

我有一个奇怪的bug,已经让我抓狂了一段时间了。我有下面一段代码:

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.)真',而第二个给我'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
});