$.extend($.fn.validatebox.defaults.rules, {
   //用户账号验证(只能包括 _ 数字 字母)     
   account: { //param的值为[]中值      
   validator: function(value, param) {
   if (value.length < param[0] || value.length > param[1]) {
   $.fn.validatebox.defaults.rules.account.message = '用户名长度必须在' + param[0] + '至' + param[1] + '范围';
   return false;
   } else {
   if (!/^[\w]+$/.test(value)) {   $.fn.validatebox.defaults.rules.account.message = '用户名只能数字、字母、下划线组成.';
   return false;
   } else {
   var loginName = value;
   /*var a=$.ajax({
   type: "POST",
   url: "yanzheng.action",
   data: "loginName=" + loginName,
   dataType: "xml",
   success:function(){var q = request.getParameter("i"); alert(q);i=true; alert(2);return true;}
   });*/
    $.get("yanzheng.action", {loginName:loginName}, function(data){
    alert(data);
   var q = "${attr.i}"; alert(q);
              if(data == "true"){
                  check_user_exist = 1;
                  alert(1);
              }else{
                  check_user_exist = 0;
                alert(3);
              }          });
   $.fn.validatebox.defaults.rules.account.message = '用户名已存在';
   return false;
   }  
   }
   }
  
   }
  
   });为什么不行啊  接受不带后台的值后台是
public boolean yanzheng(){
String loginName =  ServletActionContext.getRequest().getParameter("loginName");
UserInfo use=uservice.queryUserByLogin(loginName);
HttpServletRequest request = ServletActionContext.getRequest();
if(null==use){
int i=1;
           request.setAttribute("i", i);
           return true;
}
else
{int i=0;
request.setAttribute("i", i);
 return false;
 }

}

解决方案 »

  1.   

    因为ajax是异步的,所以 return false;这样返回是无效的。解决办法是把返回结果写入cookie,
    然后读取cookie,判断是否重复。
    ---------------------------------success: function(data){
              if(data=='success'){
          saveCookie('repetition','success');
      }else{
          saveCookie('repetition','error');
              }
    }----------------------------------