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
------解决方案--------------------
来晚了,明白了还不赶紧给分
