大侠们好,我在用jquery的Ajax发现一个问题,就是在执行回调函数时,无法为变量bl赋值,我的意思是return bl,如果bl为true就提交,否则不提交,请各位大侠帮个忙!
function check(){
     var bl = false;
     $.post("loginAction",{username:name,password:psw},function(data){
         var obj = eval('(' + data + ')');
var exist = obj["exist"];
if(exist=="yes"){
bl = true;
}else{
bl = false
alert("用户名或密码错误!");
}
},"html");
// 即使exist为yes,bl也依然为false,貌似在执行回调函数function(data)时,未吧值赋给bl
return bl;}

解决方案 »

  1.   

    应该是var exist = obj["exist"];的exist值不为yes,
    if(exist=="yes")语句没有执行吧...
      

  2.   

    因为你这边是异步的,所以在var bl = false;后异步调用ajax,而主线程择执行了return bl;所以会返回false。你要把return 写到function里面
    if(exist=="yes"){
       return true;
    }else{
       alert("用户名或密码错误!");
    return false;
    }
      

  3.   

    你用的是异步,return bl;在回调函数执行完之前就先执行了。
      

  4.   

    正解!  你可以通过回调函数方式调用提交函数
    function check(callback){//callback提交函数
         $.post("loginAction",{username:name,password:psw},function(data){
                         var obj = eval('(' + data + ')');
                    var exist = obj["exist"];
                    if(exist=="yes"){
                       if(typeof(callback)=='function'){
                             callback();
                        }
                    }else{
                        bl = false
                        alert("用户名或密码错误!");
                    }
                },"html");
    }
      

  5.   


    if(typeof(callback)=='function'){//这里少了个括号
      

  6.   

    误解!
    函数里面异步请求成功后返回值是有问题的 
    如:var isTrue = check();//check();函数里面有异步请求
        alert(isTrue);
    这里的alert(isTrue)会是check函数里面异步请求成功后才返回的值吗? 如果过check里面的请求要2秒才能请求成功 alert(isTrue)不是要等2秒才执行?  答案是否定的