formValidator ajax 乱码问题

但是用到这个AJAX功能的时候碰到问题了

Html代码

jQuery("#name").ajaxValidator({type:"post",url:"worker!findWorker.action",

success:function(data){

if(data=="1")returntrue;

elsereturnfalse;

},

error:function(){alert("服务器没有返回数据,可能服务器忙,请重试");},

onerror:"该姓名不可用,请更换用户名",

onwait:"正在对姓名进行合法性校验,请稍候..."

});

jQuery("#name").ajaxValidator({

type:"post",url:"worker!findWorker.action",

success:function(data){

if(data=="1")returntrue;

elsereturnfalse;

},

error:function(){alert("服务器没有返回数据,可能服务器忙,请重试");},

onerror:"该姓名不可用,请更换用户名",

onwait:"正在对姓名进行合法性校验,请稍候..."

});

其实验证时这个框架会自动将你的文本框的值取出来然绑定在你的URL上,

这时候它的URL会变成这样worker!findWorker.action?name=value

value就是你文本框的时候

一般输入非中文的值的话验证起来是没有问题的但是中文就会出问题

在上面这个脚本中,找了N久也没找到解决的方法,网上出现这个问题的人也挺多的,就是没有找到一个把这问题解决了的贴子。

一般不熟的框架出了问题我习惯去瞧瞧它的源码

经过我对源码的分析发现处理这个中文乱码的问题并不难

打开formValidator.js这个文件

找到

ajaxValid:function(returnObj)

{

....

}

这个方法的这行数据varsrcjo=$("#"+id);

我的工具上显示的是414行我用的formValidator版本是3.5的可能大家用的和我用的并不一样,但是这个代码在你们的版本里面一定找得到

下面教大家如何它修改

就将"varsrcjo=$("#"+id);”这行数据改成如下:

varsrcjo=$("#"+id).clone();

srcjo.val(encodeURI(srcjo.val()));这样就可以了

对jQuery熟的人肯定知道这两行代码的意思,不懂也没关系,我解释下

它的意思就是将这个对象克隆一份然后将value进uri编码

这样还不能完全处理乱码的问题

还需要在JAVA后台代码中进行解码代码如下:

Stringname=URLDecoder.decode(

ServletActionContext.getRequest().getParameter("name"),"UTF-8");

OK这样就搞定,希望能帮到大家。

相关推荐