【发布时间】:2009-10-07 13:37:35
【问题描述】:
伙计们,我遇到了一个小问题。我正在尝试实现以下场景:
- 用户打开主页并看到其他用户的列表并单击 将一个添加到他的朋友列表中。
- 我向服务器资源发出 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 = trueis displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by statingasync: false`!
不过,显然它仍在异步工作。我在这里想念什么?
【问题讨论】:
-
指定
{ async: "false" }与{ async : false }有关系吗? -
@Cory Larson 不,没关系,问题是,该方法在 ajax 请求完成之前返回 false。
标签: asp.net-mvc ajax jquery