本人是菜鸟,想用Jquery来判断昵称是否被占用(用户信息保存在数据库中),由于没有导师,在这里求助各位大虾帮忙!
代码如下:
$(function(){
$("#txtNickName").blur(function(){
flag.nickname=false;
var reg=/[u4e00-\u9fa5A-Za-z-0-9-_]*/;
var nickname=$("#txtNickName").val();
flag.nickname=reg.test(nickname);//匹配昵称是否包含非法字符
//昵称为空
if(nickname==""){
$("#name\\.info").html("<img src='../images/wrong.gif'/>昵称不能为空!");
return;
//昵称不为空
}else if(nickname.toString().length<=3||nickname.toString().length>20){
$("#name\\.info").html("<img src='../images/wrong.gif'/>昵称长度4-20个字符,一个汉字为两个字符!");
return;
}else{
//匹配正则表达式
if(flag.nickname==true){
//ajax检测
         $("#name\\.info").html("<img src='../images/window_loading.gif'/>正在检测...");
         $.post( "/dangdang05.2/check.servlet",
            {'nickname':nickname},
             function(data){
                                     alert(data);                                     if(data){ //问题在这里,不管data为false还是true,他都只执行if,else不执行,求解                                             $("#name\\.info").html("<img src='../images/wrong.gif'/>昵称已被占用!");
                         }else{
             $("#name\\.info").html("<img src='../images/right.gif'/>昵称可用!");  
                  }
          }
       );
         //不匹配正则表达式
        }else{
   $("#name\\.info").html("<img src='../images/wrong.gif'/>您的昵称包含非法字符,请重新输入");
   }
    }
});
});

解决方案 »

  1.   

    你传过来的data类型是字符串还是布尔类型。你把它当字符类型来判断试试
      

  2.   

    是boolean类型
    代码如下:
    public class CheckNickName extends HttpServlet{
    public void service(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException{
    request.setCharacterEncoding("utf-8");
    PrintWriter out = response.getWriter();
    response.setContentType("text/html;charset=utf-8");
    String nickname = request.getParameter("nickname");
    UserDao dao = new UserDaoImpl();
    boolean result;
    try {
    result = dao.checkNickName(nickname);
    System.out.println("service()~~~~ result:"+result);
    out.println(result);
    } catch (Exception e) {
    e.printStackTrace();
    }
    out.close();
    }
    }
    纠结好久了
      

  3.   

    dao.checkNickName(nickname);
    dao中checkNickName(nickname);返回的是boolean类型:
    如果检测到与昵称相同就返回true,否则返回false,
    一下是代码(是不是哪里逻辑有问题):
    public boolean checkNickName(String nickname) throws Exception {
    String sql = "select*from t_user where nickname=?";
    User user = new User();
    Connection con = DBUtil.open();
    PreparedStatement prep = con.prepareStatement(sql);
    prep.setString(1, nickname);
    ResultSet rs = prep.executeQuery();
    if(rs.next()){
    user.setNickname(nickname);
    }
    DBUtil.close(con);
    if(user.getNickname() != null){
    return true;
    }else {
    return false;
    }
    }
      

  4.   

    改成String类型也不行哦,
     $.post( "/dangdang05.2/check.servlet",
                {'nickname':nickname},
                 function(data){
                 var s = data+"";
               if(s){
              alert('s:'+s);
                 $("#name\\.info").html("<img src='../images/wrong.gif'/>昵称已被占用!");
                 flag.nickname=false;
               }else{
                 $("#name\\.info").html("<img src='../images/right.gif'/>昵称可用!");  
                      }
              }
           );
    不管是boolean类型的false,还是String类型的"false",都只执行if里面的语句……
      

  5.   

    $.post( "/dangdang05.2/check.servlet",
                {'nickname':nickname},
                 function(data){
                 var s = data+"";
               if(s=='true'){
              alert('s:'+s);
                 $("#name\\.info").html("<img src='../images/wrong.gif'/>昵称已被占用!");
                 flag.nickname=false;
               }else{
                 $("#name\\.info").html("<img src='../images/right.gif'/>昵称可用!");  
                      }
              }
           );
      

  6.   

    5#的方法也不行哦
     if(s=='true'){
              alert('s:'+s);
                 $("#name\\.info").html("<img src='../images/wrong.gif'/>昵称已被占用!");
                 flag.nickname=false;
               }else{
                 $("#name\\.info").html("<img src='../images/right.gif'/>昵称可用!");  
                      }
    不管s=='true'还是s=='false'它都只执行else里面的语句。
    ps:那个回调函数返回的是Servlet中的out.println(result);或者是jsp中的<%=result %>吗?
      

  7.   

    返回的应该是字符串类型,if(s=='true')这么判断,还得确定一下返回的data是不带空格换行这些的。
      

  8.   

    首先,你alert出来的是不是有true  和 false 两种情况,第二,试下  
     alert(data);
     data = true;   //data=false;
     if(data){ //问题在这里,不管data为false还是true,他都只执行if,else不执行,求解   看下是不是还是只执行一种  
      

  9.   

    问题解决了,谢谢各位大虾帮忙,你们给的丝路都是对的,是我想错了,#7一语惊醒,原来我在Servlet中用了out.println(result);该句自动换行了,一直没转换成功,把ln去掉就ok了,本来都想给分,但是小弟的分少真是不好意思啊!