jquery验证返回值怎么是undefined
function checkemail() {
var name = $("#regEmail").val();
var str;
$.get("../reg.ashx?bigtype=email&email=" + name,
function(data) { //返回值data没有问题,就是no和ok
if (data == "no") {
$("#txtemail").addClass("prompt-error");
$("#txtemail").html("<i></i>电子邮箱已经被注册");
str = false;
}
if (data == "ok") {
$("#txtemail").addClass("prompt-ok");
$("#txtemail").html("<i></i>");
str = true;
} //class和html()都是对的
});
return str; //就是这个return出问题了。。
}
alert(checkemail());永远是undefined,晕倒了
[解决办法]
function checkemail() {
var name = $("#regEmail").val();
var str;
$.ajax({
async: false,
url: '../reg.ashx?bigtype=email&email='+name,
success: function(data){
//这里的赋值在外面是得不到的。
if (data == "no") {
$("#txtemail").addClass("prompt-error");
$("#txtemail").html("<i></i>电子邮箱已经被注册");
str = false;
}
if (data == "ok") {
$("#txtemail").addClass("prompt-ok");
$("#txtemail").html("<i></i>");
str = true;
} //class和html()都是对的
}
})
return str; //就是这个return出问题了。。
}
[解决办法]
js执行是顺序,没有等到get的异步获得值就返回了。
像5#的将async:?false,设成同步就行了,get没有获得值就不往下执行。
[解决办法]
这是因为AJAX默认是异步调用的,在你的写法中return str虽然在后面,但实际是比$.get里的function先执行的,所以返回的是undefined。解决办法是不用$.get(),而用$.ajax,把异步调用设为false,具体代码见#5。