伙计们,我有一个小问题。我正在尝试实现以下方案:
听起来很简单?这是我做的事情:创建了一个函数isLoggedIn,该函数将向服务器发出第一个请求,以确定用户是否已登录。我使用jQuery.ajax方法发出此请求。这是我的函数,如下所示:
isLoggedIn
jQuery.ajax
function isLoggedIn() { $.ajax({ async: "false", type: "GET", contentType: "application/json; charset=utf-8", dataType: "json", url: "/isloggedin", success: function(jsonData) { alert("jsonData =" + jsonData.LoggedIn); return jsonData.LoggedIn; } }); }
返回的JSON非常简单,如下所示:
{ LoggedIn: true } or { LoggedIn : false }
现在,此方法可以实际运行并正确显示警报:JsonData = true如果已登录,JsonData = false如果尚未登录,则到目前为止。没有问题,当我尝试调用此方法时会出现问题:我这样调用:
JsonData = true
JsonData = false
$(".friend_set .img").click(function() { debugger; if (isLoggedIn()) { alert("alredy logged in"); trackAsync(); popupNum = 6; } else { alert("not logged in"); //always displays this message. popupNum = 1; } //centering with css centerPopup(popupNum); //load popup loadPopup(popupNum); return false; });
调用isLoggedIn总是返回false,并且返回false before the ajax request finishes (because the messagejsonData = true is displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by statingasync:false`!
false
false before the ajax request finishes (because the message
is displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by stating
显然,它仍在异步工作。我在这里想念什么?
你需要async:false,没有async:"false"。(即传递boolean false,而不是string "false")。
async:false
async:"false"
"false"
编辑:同样对于异步请求,您需要在调用 之后 返回一个值ajax, 而不是 在成功处理程序内部:
ajax
function isLoggedIn() { var isLoggedIn; $.ajax({ async: false, // ... success: function(jsonData) { isLoggedIn = jsonData.LoggedIn } }); return isLoggedIn }