jqGrid查询中文乱码问题解决办法(2011-11-11)

终极解决办法-2011-11-11

之前是通过修改源码的方式解决乱码问题,但是只能解决一部分问题而且不利于升级,@嘴大饿急的意见我实验了一下比较完美,设置所有的ajax请求都使用post请求就可以了,具体代码:

$.jgrid.ajaxOptions.type = 'post';

上面的这段代码可以在项目的common.js中设置,这样所有的jqgrid的ajax请求都是用post发送,远离乱码……清净了!
哎呀,今天又是一个好日子,百年一遇的六一……

历史解决办法

jqGrid是我用过最好的基于jQuery的列表插件,在项目中试用后效果很不错,基于jQuery UI的界面美观并且可以更好皮肤……

花了一天时间实现了增删改和查询功能,但是在查询中文的时候遇到了乱码问题……诡异,说一下情况:

  • 我的开发环境是全站UTF-8,而且有编码Filter;
  • jqGrid版本为:3.6.4

在后台断点调试发现如下特点:

1、新增、编辑没有乱码问题

2、查询中文后台时得到的参数是乱码

然后就考虑了,如果是开发环境问题那肯定全部都有乱码问题,所以问题应该在jqGrid的查询函数里面,最后通过Firebug找到了:

c.find(".ui-search").click(function() {

这一行是查询功能的开始也就是点击“查询”的触发函数

所以根据以往的经验在这里把参数值编码一次就可以了,也就是encodeURIComponent函数具体修改如下:

  1. 找到第6202行
  2. 找到代码
    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行代码就是查询时获取参数的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 共 361 次

资源下载:jquery.jqGrid.min.3.6.4.js 共 367 次

资源下载:jquery.jqGrid.pack.3.6.4.js 共 285 次

jqGrid3.8版本,更新日期(2010-11-06)

此版本是我修改后一直在项目中运行的,目前没有发现问题,特此公布,仅有min和pack版本
资源下载:jquery.jqGrid.min-3.8.js 共 230 次

资源下载:jquery.jqGrid.pack-3.8.js 共 216 次

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: jqGrid查询中文乱码问题解决办法(2011-11-11)

无觅相关文章插件,快速提升流量

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

发表评论?

6 条评论。

  1. 将jqgrid的请求方式直接改成post此问题也可以解决。

  2. 斑竹 问题解决了哈
    你的方法外,也可以在tomcat对应的端口设置里添加
    useBodyEncodingForURI=”true”
    告诉tomcat用页面的编码去处理post
    问题解决!

  3. 楼主 你好!
    我遇到了和你一摸一样的问题
    也是查询中文字段返回到后台是乱码
    但是添加和修改却没任何问题.
    也是全站UTF-8,而且有编码Filter
    我下载了你的js包后,还是没用,依然是乱码.
    我用的是3.8.2
    请问我还需要注意哪些地方吗?

  4. 如果是tomcat 可修改server.xml

    URIEncoding=”UTF-8″ 这个参数

  5. 公告:已发布了jqGrid3.8版本的乱码问题打包版本。 :razz:

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。