我有一个令人毛骨悚然的错误让我疯狂了一段时间。我有以下代码:
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'。发生了什么事?
答案 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
});