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 为什么?

解决方案 »

  1.   

    这个应该和异步有关,执行ajax的时候并不会阻塞后面的程序执行,所以ajax知识向后台发送了一个请求,请求还没有放回就已经执行了最后的那个return所以那个就一直是false。个人理解
      

  2.   

    我在AJAX 写个return true 返回值是undefined
      

  3.   

    如果程序进到 if 第一个块里 没什么说的 return false;
    如果程序走到 else 块里, $.ajax() 默认是异步的请求, ValidateUserName() 函数不会hold住等待请求返回, 而是发出去请求继续执行下面的代码:return state;  // state 初始化是 false