六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 25|回复: 0

formValidator ajax 乱码问题

[复制链接]

升级  23.33%

76

主题

76

主题

76

主题

举人

Rank: 3Rank: 3

积分
270
 楼主| 发表于 2013-1-29 10:32:54 | 显示全部楼层 |阅读模式
初次使用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 这样就搞定 ,希望能帮到大家 。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表