代码之家  ›  专栏  ›  技术社区  ›  Ahmed

$.ajax({async:false})请求仍在异步启动吗?

  •  33
  • Ahmed  · 技术社区  · 16 年前

    我这里有点小问题,伙计们。我正在尝试实现以下场景:

    1. 用户打开主页,看到其他用户和单击的列表
    2. 我向服务器资源发出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;
    
    });
    

    使命感 伊斯洛格丁 总是回来 false ,然后它返回 false before the ajax request finishes (because the message jsonData=true is displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by stating async:false`!

    显然,它仍然在异步工作。伙计们,我错过了什么?

    1 回复  |  直到 10 年前
        1
  •  62
  •   bendewey    16 年前

    你需要 async:false async:"false" . (i、 传递布尔 false ,而不是字符串 "false" ).

    编辑: 对于异步请求,还需要返回一个值 之后 呼吁 ajax 在成功处理程序中:

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