jqGrid是我用过最好的基于jQuery的列表插件,在项目中试用后效果很不错,基于jQuery UI的界面美观并且可以更好皮肤……
花了一天时间实现了增删改和查询功能,但是在查询中文的时候遇到了乱码问题……诡异,说一下情况:
- 我的开发环境是全站UTF-8,而且有编码Filter;
- jqGrid版本为:3.6.4
在后台断点调试发现如下特点:
1、新增、编辑没有乱码问题
2、查询中文后台时得到的参数是乱码
然后就考虑了,如果是开发环境问题那肯定全部都有乱码问题,所以问题应该在jqGrid的查询函数里面,最后通过Firebug找到了:
c.find(".ui-search").click(function() {
这一行是查询功能的开始也就是点击“查询”的触发函数
所以根据以往的经验在这里把参数值编码一次就可以了,也就是encodeURIComponent函数具体修改如下:
- 找到第6202行
- 找到代码
6201
6202
6203
|
var p = jQuery(this).find("select[name='field'] :selected").val(),
g = jQuery(this).find("select[name='op'] :selected").val(),
f = jQuery(this).find("input.vdata,select.vdata :selected").val();
|
- 现在看到这里的3行代码就是查询时获取参数的3个变量,我们要修改的就是这里,最终代码:
6202
6203
6204
|
var p = encodeURIComponent(jQuery(this).find("select[name='field'] :selected").val()),
g = encodeURIComponent(jQuery(this).find("select[name='op'] :selected").val()),
f = encodeURIComponent(jQuery(this).find("input.vdata,select.vdata :selected").val());
|
到此大功告成
——————————–分割线———————————–
为了方便网友顺便提供本人修改后的jqGrid3.6.4版本的源码,分为3中类型(未压缩、迷你版、压缩版pack)
下载:
jquery.jqGrid.3.6.4.js 共 149 次
下载:jquery.jqGrid.min.3.6.4.js 共 127 次
下载:jquery.jqGrid.pack.3.6.4.js 共 98 次
Popularity: 24%
哎,还是老话题,一直缠绕着国人……
现在来个快刀斩乱麻,let’s go
由于项目前期使用的是1.2.6版本,后期使用的是1.3.2版本,所以分开来讲;
说说实现的办法,有点暴力——直接修改jQury源码,不过不用担心,不会影响整体功能而且就修改几行代码就可以解决乱码,也就是在发送请求的时候把参数值再进行一次转码,修改的方法为param
1、jQuery 1.2.6 乱码解决办法
- 打开1.2.6版本的源文件
- 找到第2911、2921、2924行,分别修改对应参数值的地方包裹一层encodeURIComponent即可,修改后的结果如下:
param: function( a ) {
var s = [];
// If an array was passed in, assume that it is an array
// of form elements
if ( a.constructor == Array || a.jquery )
// Serialize the form elements
jQuery.each( a, function(){
s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent(encodeURIComponent( this.value )) );
});
// Otherwise, assume that it's an object of key/value pairs
else
// Serialize the key/values
for ( var j in a )
// If the value is an array then the key names need to be repeated
if ( a[j] && a[j].constructor == Array )
jQuery.each( a[j], function(){
s.push( encodeURIComponent(j) + "=" + encodeURIComponent(encodeURIComponent( this )) );
});
else
s.push( encodeURIComponent(j) + "=" + encodeURIComponent(encodeURIComponent( jQuery.isFunction(a[j]) ? a[j]() : a[j] )) );
// Return the resulting serialization
return s.join("&").replace(/%20/g, "+");
}
下载:jquery-encode-gbk.1.2.6.js 共 489 次
下载:jquery-encode-gbk.pack.1.2.6.js 共 405 次
2、jQuery 1.3.2 乱码解决办法
1.3.2的就不用这么麻烦了,因为这个版本简化了param方法的结构,只需要修改一行代码即可,因为只有一个地方转码了
找到第3737行,同样包裹一层encodeURIComponent,结果如下:
param: function( a ) {
var s = [ ];
function add( key, value ){
s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(encodeURIComponent(value));
};
下载:jquery-encode-gbk-1.3.2.js 共 856 次
下载:jquery-encode-gbk-.pack.1.3.2.js 共 849 次
重要说明:后台必须要转码:java.net.URLDecoder.decode(request.getParameter(“name”), “UTF-8″)
Popularity: 100%