1

这是我的代码。我想获得“旗帜”,但“旗帜”总是“假”。即使程序执行到“flag=true”,“flag”在返回时变为“false”。如何从 $.ajax() 中获得真正的价值?请帮我。谢谢

function checkUserName() {
var name = document.getElementById("userName").value;
var namemsg = document.getElementById("userNameMsg");
var flag=false;
if (name == "") {
    flag=false;
} else {
    $.ajax({
        type : "POST",
        url : "/vclub/verify/checkUserName.do",
        dataType : "json",
        data : "userName=" + name,
        success : function(data) {
            if (data == true) {
                flag=true;
            } else {
                flag=false;
            }
        }
    });
}
alert(flag);
return flag;

}

4

3 回答 3

3

由于 AJAX 是异步的,因此您需要使用回调。目前,您在代码末尾返回标志后收到 AJAX 响应。关键是success之前没有调用return flag,因为附加到的匿名函数success仅在从 接收到响应时才被调用url。请注意,由于您可能会或可能不会运行 AJAX 请求,因此当您可以立即提供返回时(如果名称是空字符串),您仍然需要使用回调函数。在这种情况下,回调将在 flag 设置为 false 后不久执行。否则,checkUserName 可能会在 AJAX 返回之前完成。

function checkUserName(callback) {
    var name = document.getElementById("userName").value;
    var namemsg = document.getElementById("userNameMsg");
    var flag=false;
    if (name == "") {
        // Note a callback is needed even if we don't use AJAX (because we might)
        flag=false;
        callback(flag);
    } else {
        $.ajax({
            type : "POST",
            url : "/vclub/verify/checkUserName.do",
            dataType : "json",
            data : "userName=" + name,
            success : function(data) {
                if (data == true) {
                    flag=true;
                } else {
                    flag=false;
                }
                callback(flag);
            }
        });
    }
}

如何使用:

checkUserName(function (flag) {
    // Here, the flag variable is available, but will not run until "callback" is called above
    alert(flag);
});
于 2013-03-30T08:11:42.547 回答
0

flagAJAX 请求成功完成时, 的值会发生变化,因为您分配给函数success属性的$.ajax函数是回调。实际上,您alert(flag);的代码行将在执行success回调之前运行(当flag' 的值尚未更改时)。

如果你移动alert(flag);success回调,你会看到它的值发生了变化。

我认为您也需要将callback();行移至该功能。

于 2013-03-30T08:12:32.423 回答
0

async:false,

function loadProcess(processId) {
    var prc;
    $.ajax({
        async: false,
        url: '/processes/getprocess',
        data: {
            'id': processId
        },
        success(result) {
            prc = result;
        },
        error(xhr) { alert(xhr.responseText); }
    });
    return prc;
}
于 2016-03-09T10:17:27.377 回答