$ .ajax({async:false})请求仍然异步触发?
伙计们,我有一个小问题。我正在尝试实现以下方案:
- 用户打开主页,看到其他用户的列表,然后单击以将其添加到他的朋友列表。
- 我向服务器资源发出Ajax请求,以验证用户是否登录,如果是,我向另一个服务器资源发出另一个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如果尚未登录,则到目前为止。没有问题,当我尝试调用此方法时会出现问题:我这样调用:
$(".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`!
显然,它仍在异步工作。我在这里想念什么?
回答:
你需要async:false
,没有async:"false"
。(即传递boolean false
,而不是string "false"
)。
编辑:同样对于异步请求,您需要在调用 之后 返回一个值ajax
, 而不是 在成功处理程序内部:
function isLoggedIn() { var isLoggedIn;
$.ajax({
async: false,
// ...
success: function(jsonData) {
isLoggedIn = jsonData.LoggedIn
}
});
return isLoggedIn
}
以上是 $ .ajax({async:false})请求仍然异步触发? 的全部内容, 来源链接: utcz.com/qa/417414.html