本帖最后由 renboy20 于 2011-08-05 17:15:25 编辑

解决方案 »

  1.   

    声明一个变量isTrue,进行判断的时候,在useridpdt 和 callbackidpd 给它赋值最后判断isTrue的值来决定是否可以提交
      

  2.   

    自相矛盾。这样的话,你就不应该用异步调用并设置回调函数了,而是应该采取同步读取方式,在useridpd内部读取处理后得到结果,useridpd自然就能知道它的结果了。根据需求,认真画出流程图,每一步按策略决定做法,设计好再编码,就能避免这样草率的现象了。
      

  3.   


    function checkForm()
    {
        if(useridpd()&&callbackidpd(data))
          {return true;}
        else
          {return false;}
    }
      

  4.   


    早上起来就看到你N个回复了
    终于明白你那些勋章怎么得来的了
    分就那么重要么?
    随时都摆出一副高高在上的姿态
    我们都是菜鸟
    但是也不一定就全部是错的
    LZ的方法完全没有问题
    只是少了一个步骤而已
    1L基本把问题的解决方法都说出来了
    你什么解决方案都没提出来
    连原因都找错了...
    最后还说别人如何如何...
      

  5.   

    function useridpd(){
        if (!Isuserid($('#userid').val())) //如果没有通过正则表达示的检查
          {
            $('#useridzt').html("<div class='err'><b class='xx'></b>用户名含有非法字符</div><div class='errLast'></div>");
            return false;
           }
        else{ // 通过了正则表达示 
             if ($('#userid').val()=="" || $('#userid').val().length <=3)  // 文本框的值为空或少于4个字节
                 {
                $('#useridzt').html("<div class='err'><b class='xx'></b>用户名不能为空或少于4个字节</div><div class='errLast'></div>");
                return false;}
             else         //文本框里的值为正常
               {var useridtxt= $('#userid').val();
                var isUserExists;
                $.get("\\ajax\\useridpd.ashx?userid="+useridtxt,null,callbackidpd);   //调用callbackidpd函数
    if (!isUserExists) //如果返回的值为false表示数据库中没查到相同的
           {
         $('#useridzt').html("<div class='textbox_ok'><b></b></div>");  //输出OK图片
            return true;
            }
         else{
           $('#useridzt').html("<div class='err'><b class='xx'></b>用户名已被注册</div><div class='errLast'></div>");  //输出失败信息关返回false的值
           return false;            
            }
                }
            }} function callbackidpd(data){             
         if (data=="false") //如果返回的值为false表示数据库中没查到相同的
           {isUserExists=false;
            }
         else{
           isUserExists=true;            
            }
    }
      

  6.   


    其实对数据库里是否存在验证后,返回的true和flase只是纯文本的,然后再用js判断的并不是bool值!
    在useridpd内部用return返回的值也没返回给父级函数!
      

  7.   


    你说的方法和6楼的是一样吧!!我目前按照6楼的办法,但出现了一个问题,在useridpd函数里面定义了一个变量,通过回调函数去赋值,但是在useridpd函数里查到那个变量并没有值呢!
      

  8.   

    我觉得是这样的
     $.get("\\ajax\\useridpd.ashx?userid="+useridtxt,null,callbackidpd);   //调用callbackidpd函数
    这是个异步操作
    所谓异步操作,就是useridpd这个函数走到以上那句话的时候不会等待你那个callback的返回,而是直接继续走下去了,由于你那个函数后面没有语句了,因此这个函数也就运行完毕了,也就是没有返回值。
    而当以上那个语句真的返回了的时候,原先的useridpd函数早已经走完了,因此不会发生返回值。
    我觉得单靠判断useridpd()返回的值去判断成功不成功是不行的
    如果确定就是要靠useridpd这个函数去判断 那就吧那个ajax改成同步的操作 这样的话函数走到那个ajax会等待那个访问返回才会继续走下去
    否则用异步的话 还是在callback里 做你如果成功或者失败的操作吧
      

  9.   

    其实LZ的需求是个很常见的问题,比如,现在有人要注册会员,那么会要求填写一个用户名,完成之后,首先检查用户名是否符合一定的规则(4-12的数字和字母...),如果合格则用ajax提交到服务器查询是否该用户名己存在,如果存在则不能用于注册,反之则可以。因为ajax验证用户名是异步的,所以可能在你还没有得到结果之前,用户就点击了提交按钮,结果...因此,交互过程可以如下:
    var isTrue = false;
    function checkUserName() {
    var 用户名 = 表单值;
    if(用户名是由4到12位的数字和字母组成的) {
    ajaxCheck(用户名);
    }
    }
    function ajaxCheck() {
    if(请求发生错误或请求超时) {
    isTrue = true; //以上情况,则把验证放到后台去完成(后台肯定还是要验证一次),前台直接放行
    }
    if(该用户名可用) {
    isTrue = true;
    }
    }

    提交表单的按钮的submit事件 = function() {
    if(isTrue) {
    form.submit();
    } else {
    alert(正在验证用户名是否可用,请等一小会会)
    }
    }
      

  10.   


    不是改同步就行了,程序写法也得改, 给你一个检查用户名的例子function register(){
    var exist=checkusername()

    }function checkusername(){
    var ok=false;
        $.ajax({
            url : "checkusername.php",
            cache : false,
            async : false,
            type : "post",
            success :function(r){
    ok=(r=="true");
            }
        });
    return ok;
    }
      

  11.   


    function register(){
    var exist=checkusername()
    if(exist){
    alert("用户名己存在,或检查失败");
    return false;
    }
    }function checkusername(name){
    var ok=false;
        $.ajax({
            url : "checkusername.php?u="+name,
            cache : false,
            async : false,
            type : "post",
            success :function(r){
    ok=(r=="true");
            }
        });
    return ok;
    }