【问题标题】:$.ajax( { async : false } ) request is still firing asynchronously?$.ajax( { async : false } ) 请求仍在异步触发?
【发布时间】:2009-10-07 13:37:35
【问题描述】:

伙计们,我遇到了一个小问题。我正在尝试实现以下场景:

  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;

});

调用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


【解决方案1】:

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

编辑: 同样对于异步请求,您需要在成功处理程序中调用ajax之后返回一个值,不是

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

【讨论】:

  • 感谢本德威!看到有人编辑我的帖子总是令人不安(我一直忘记这个功能),但是谢谢。
  • 成功处理程序执行后的返回值!
  • 但是isLoggedIn 是否有来自jsonData.LoggedIn 的实际值?就我而言,它返回“未定义”
猜你喜欢
  • 2016-10-22
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多