用户名:<input type="text" name="reguser.username" id="username">
用户名可以是 中文、英文及数字。
正确的代码如下 (重点注意第七行的data传值):
$("#username").formValidator({onShow:"请输入用户名,汉字、英文字母、数字,4-20个字符!",onFocus:"请您记住填写的用户名,以后登录时需要用到。",onCorrect:"该用户名可以注册!"}) .inputValidator({min:4,max:20,onError:"用户名长度不对,请重新输入!"}) .ajaxValidator({ dataType : "html", async : true, type : 'post', data:{'usera':function(){return $("#username").val()}}, url: "usercheckusername.html" , success : function(data, textStatus){ if(data.indexOf("true")>-1){return true;} if(data.indexOf("false")>-1){return "该用户名不可用,请更换用户名";} return "服务器没有返回数据,可能服务器忙,请重试" }, error: function(){alert("服务器没有返回数据,可能服务器忙,请重试");}, onerror : "该用户名已经存在,请更换用户名", onwait : "正在对用户名进行合法性校验,请稍候…" });
问题:
本来不加data时, 只要输中文的时候(不管type是get还是post),在chrome和IE浏览器下,后台就接收不到reguser.getUsername的值,报null。(火孤倒是都正常的)
于是想到用url带参的方式来传值
即:url: "usercheckusername.html?username="+$("#username").val() ,
但后台依然接收不到数据。
转而想到用data属性传值
即:data:'usera='+ $("#username").val(),
但发现后台接收到usera的值,依然为空。(如果不用该校验框架,这么写肯定没错的。)
随即去网上查阅了很多资料,不知道这里是不是一个BUG,改为
data:{'usera':function(){return $("#username").val()}},
就可以了,而type:'post'是因为有中文,用get得自己转码,不然会乱码。
------------------------
后记:不知道这是不是formvalidator4.1.3版本的问题,还是所有的formvalidator都有此问题。