Html---------------------
<form    runat="server"  id="form1" >
用户名:<input  type="text"  id="userName"><span id="msg"></span>
              <input type="submit" value="提交">
</form>Js-----------------------
$("#userName").blur(function(){
    checkUserName();
});function checkUserName()
{
   var username = $("#userName").val();
            if (username.length < 3 || username.length > 15)
            {
                $("#msg_userName").text("用户名需要在3-15位字符之间");
                return false;
            }
            $.post("CheckUserName.ashx", { "userName": username }, function (data) {
                if (data == "ok") {
                    $("#msg_userName").text("输入正确!");
                    return true;
                } else {
                    $("#msg_userName").text("该用户名已存在!");
                    return false;
                }
            });
            return true;
}Cs---------CheckUserName.ashx-------------
           //获取用户输入的信息
            string userName = context.Request["userName"];            //根据用户输入的用户名,查询数据库中是否有此信息
            string sqlStr = "userName='" + userName + "'";//查询语句
            BLL.Users users = new BLL.Users();
            DataSet ds = users.GetList(sqlStr);            if (ds.Tables[0].Rows.Count > 0)
            {
                context.Response.Write("no");
            }
            else
            {
                context.Response.Write("ok");
            }Cs-------.aspx.cs------------
           //获取用户输入的信息
            string userName = context.Request["userName"];
           Model.user  userModel=new Model.user();
            userModel.userName=userName ;
            BLL.user  userBll=new BLL.user();
           userBll.Add(userModel);若是我在form标签中,加入onsubmit="return checkUserName();",提交的时候倒是可以检查出来‘用户名需要在3-15位字符之间’,此时不会提交到后台,数据更不会插入到数据库;
但是我若是输入了一个数据库中已经存在的用户名,运用ajax,可以检查出来,并显示提示文字:‘该用户名已存在’;但是若是直接输入已经存在的用户名,直接点提交的话,不会出现任何报错文字,而且后台数据库中也会插入该条信息。所以,想问下大神,到底怎么设置,可以让【输入已经存在的用户名】,直接点提交时,出现报错信息,且不会向后台提交任何数据。
一个具体的例子:百度云输入验证码,若是输入不正确,点击提交时,会立马出现‘验证码输入错误’的提示,此时百度云不会登录。

解决方案 »

  1.   

    通过浏览器的network看一下返回值吧
      

  2.   

    你的 $.post 是一个异步请求,就是说你的post请求发送到服务器之后,post后面的代码【根本没有等待这个post请求返回请求结果】就执行了,所以总是执行最后一个return true ,一般说到这里你就知道怎么解决了
      

  3.   

    不提交数据  你怎么知道用户名存在?   你提交数据到后台返回ok或no,难道就不会返回别的了吗,或者用json不可以吗?
      

  4.   


    提交后台是有验证的,主要是想用ajax实现客户端验证,因为一旦用户输入一个错误提交了,到达报错页面,再回来重新注册,那么原先输入的信息都不会存在了,这样用户体验度不是很好。当然用cookie也可以
      

  5.   

    blur,光标失去焦点的时候,就会提交数据了。json 的话,一样的错误/(ㄒoㄒ)/~~
      

  6.   

    感觉你的checkUserName返回了true导致表单提交,建议在ajax中console.log一下ajax返回的data看看,究竟返回了什么数据。
      

  7.   


    若是我在form标签中,加入onsubmit="return checkUserName();",提交的时候倒是可以检查出来‘用户名需要在3-15位字符之间’,此时不会提交到后台,数据更不会插入到数据库;
    没太细看,不过既然你写了onsubmit="return checkUserName();",那么checkUserName函数的最后一句要写上return false,阻止继续提交默认的submit;ajax回调函数的return false,和外层函数没直接关系,不能阻止sumit的重复调用,这个新手也可能初心犯错。