日期:2014-05-16  浏览次数:20393 次

函数返回值

function ValidateUserName() {
    var state = false;
    if ($("#txtUserName").val() == "") {
        $("#userNameError").attr("class", "error");
        $("#userNameError").text("用户名不能为空");
        return false;
    } else {
        $.ajax({
            type: "POST",
            url: "ValiDate/ValidateUserName.ashx",
            data: { userName: $("#txtUserName").val() },
            datetype: "test",
            success: function (data) {
                if (data == "true") {
                    $("#userNameError").attr("class", "error");
                    $("#userNameError").text("该账号已被使用");
                } else {
                    $("#userNameError").attr("class", "correct");
                    state = true;//这里已经赋值
                    alert(state);弹窗的时候显示为true
                    $("#userNameError").text("");
                    
                }
            }

        });
    }
    return state;
}

    var a = ValidateUserName();
    alert(a) 这里确实显示为false 为什么?
------解决方案--------------------
这个应该和异步有关,执行ajax的时候并不会阻塞后面的程序执行,所以ajax知识向后台发送了一个请求,请求还没有放回就已经执行了最后的那个return所以那个就一直是false。个人理解
------解决方案--------------------
如果程序进到 if 第一个块里 没什么说的 return false;
如果程序走到 else 块里, $.ajax() 默认是异步的请求, ValidateUserName() 函数不会hold住等待请求返回, 而是发出去请求继续执行下面的代码:

return state;  // state 初始化是 false

------解决方案--------------------
来晚了,明白了还不赶紧给分