日期:2014-05-16  浏览次数:20761 次

formValidator ajax 乱码问题
初次使用formValidator
感觉这框架功能强大

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

jQuery("#name").ajaxValidator({
									type:"post",url:"worker!findWorker.action",
									success : function(data){	
										if( data == "1" ) return true;
										else			  return false;	 
									},
									error: function(){alert("服务器没有返回数据,可能服务器忙,请重试");},
									onerror : "该姓名不可用,请更换用户名",
									onwait : "正在对姓名进行合法性校验,请稍候..."
								});

其实验证时这个框架会自动将你的文本框的值取出来 然绑定在你的URL上 ,
这时候它的URL会变成这样worker!findWorker.action?name=value
value就是你文本框的时候
一般输入非中文的值的话  验证起来 是没有问题的 但是中文就会出问题
在上面这个脚本中,找了N久也没找到解决的方法,网上出现这个问题的人也挺多的,就是没有找到一个把这问题解决了的贴子 。

一般不熟的框架 出了问题 我习惯去瞧瞧它的源码
经过我对源码的分析 发现处理这个中文乱码的问题并不难
打开formValidator.js这个文件
找到
ajaxValid : function(returnObj)
{
   ....
}

这个方法的这行数据 var srcjo = $("#"+id) ;
我的工具上显示的是414行 我用的formValidator版本是3.5的 可能大家用的和我用的并不一样,但是这个代码在你们的版本里面一定找得到

下面教大家如何它修改
就将"var srcjo = $("#"+id) ;”这行数据改成如下:
var srcjo = $("#"+id).clone();
  srcjo.val(encodeURI(srcjo.val()));
这样就可以了
对jQuery熟的人肯定知道这两行代码的意思,不懂也没关系 ,我解释下
它的意思就是 将这个对象克隆一份 然后将value进uri编码

这样还不能完全处理乱码的问题
还需要在JAVA后台代码中进行解码 代码如下:
String name = URLDecoder.decode(
ServletActionContext.getRequest().getParameter("name"), "UTF-8");
OK 这样就搞定 ,希望能帮到大家 。