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

jquery+ajax异步刷新为何取不到返回的值呢? - Web 开发 / Ajax
JScript code
function chkusername(){
        var userName = jQuery.trim($("#userName").val());
        if(userName == ""){
            showFalseClass("#alt_uname","请输入用户名");
            return false;
        }else if(userName.length<4){
            showFalseClass("#alt_uname","用户名不能少于四位");
            return true;
        }else{
/*问题出现在这里---------------------*/
        $.get("for_userreg.php?act=chkuname&uid=" + userName,null,function(response){
            if(response=="OK"){
                showTrueClass("#alt_uname");
                return true;
            }else{
                showFalseClass("#alt_uname","该用户名已经存在");
                return false;
            }
            })
/*问题出现在这里结束---------------------*/
        }
    }




------解决方案--------------------
用同步请求

或者在异步的回调函数处理其它逻辑
------解决方案--------------------
JScript code
function chkusername(){
        var userName = jQuery.trim($("#userName").val());
        if(userName == ""){
            showFalseClass("#alt_uname","请输入用户名");
            return false;
        }else if(userName.length<4){
            showFalseClass("#alt_uname","用户名不能少于四位");
            return true;
        }else{
var ok=false;//////
/*
        $.get("for_userreg.php?act=chkuname&uid=" + userName,null,function(response){
            if(response=="OK"){
                showTrueClass("#alt_uname");
                return true;
            }else{
                showFalseClass("#alt_uname","该用户名已经存在");
                return false;
            }
            })*/

$.ajax({
url:"for_userreg.php?act=chkuname&uid=" + userName,
async:false,///////////////////////
success:function(data){
if(data=="OK"){
                showTrueClass("#alt_uname");
                ok= true;/////////////////
            }else{
                showFalseClass("#alt_uname","该用户名已经存在");
               ///// return false;
            }
}
});

return ok;/////////
        }
    }

------解决方案--------------------
用$.ajax, async:false 这样就是同步处理。
------解决方案--------------------
或者jquery1.5+可以考虑用Deferred Object

http://api.jquery.com/category/deferred-object/
------解决方案--------------------
对,用同步。
------解决方案--------------------
默认就是异步,实质是2个线程。
------解决方案--------------------
什么情况,学习,学习。。。