首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

jquery验证返回值如何是undefined

2013-01-20 
jquery验证返回值怎么是undefinedfunction checkemail() {var name $(#regEmail).val()var str$.get

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。

热点排行