asp.net-mvc – $.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,并且在ajax请求完成之前返回false(因为messagejsonData = true显示在消息“not logged in”之后)。我确保请求是** NOT ** Asynchronous by statingasync:false`!

显然,它仍然是异步工作,虽然。我在这里缺少什么家伙?

解决方法

你需要async:false,而不是async:“false”。 (即传递布尔值false,不是字符串“false”)。

编辑:
也有异步请求,你需要在调用ajax后返回一个值,而不是在你的成功处理程序内部:

function isLoggedIn() {
    var isLoggedIn;
    $.ajax({
        async: false,// ...
        success: function(jsonData) {
            isLoggedIn = jsonData.LoggedIn
        }
    });
    return isLoggedIn 
}

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....