jqGrid的autoencode参数设置为true在客户端可能引发的编码问题
不久前使用jqGrid+MVC做过一段时间开发。
一开始,分页参数几乎都是默认值,jqGrid的分页功能很好用。
考虑到each input is evil,我们的系统对安全性又有较高要求,所以,为了保证输入和输出都比较可靠,找了一下网上的资料,发现autoencode参数能满足需求。
By the way,参考了很多关于jqGrid使用的中文参考文章,大部分都只说是对url进行编码,讲的很不明确,后面还会对我排查问题造成不小的干扰。
除了分页之外,我们还需要在列表的最后一列加上操作列,实现诸如常见的更新、删除等操作。然后就发现了问题:在操作列发现了乱码。
比如有一个分页列表,最后一个操作列加上“编辑”和“删除”链接,按照jqGrid的常用做法,我们是在gridComplete回调函数中通过简单拼接字符串实现编辑和删除效果的,示例代码大致如下:
gridComplete: function () {
var ids = jQuery("#yourGridtable").jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var itemID = ids[i];
var strUpdate = "<a href='javascript:;' class='update' name='btnEdit' id='btnEdit_" + itemID + "'>修改</a> | ";
var strDel = "<a href='javascript:;' class='del' name='btnDelete' id='btnDelete_" + itemID + "'>删除</a>";
$("#yourGridtable").jqGrid('setRowData', ids[i], { UserAction: strUpdate + strDel });
}
setTimeout(function () {
//todo 设置编辑效果
//todo 设置删除效果
}, 200);
}
gridComplete
可是,拼接后的字符串在页面中显示是html编码后的效果,根本没有出现“修改”和“删除”链接。
出现该问题的第一反应是字符串没拼接正确,检查后发现不是这个原因。
然后,我在参考了一堆资料排查了n个参数未果之后,最后跟进jqGrid的源代码里才发现是autoencode这个参数设置为true造成的。
参考官方wiki,发现autoencode这个参数的说明如下:
When set to true encodes (html encode) the incoming (from server) and posted data (from editing modules). For example < will be converted to <.
翻译过来,就是:当该参数设置为true,对客户端请求和服务端返回数据都进行html编码,比如<被编码成<
html编码的原理也很简单,也就是几个特殊符号的转义而已,贴一下jqGrid的html编码实现源代码:
htmlEncode : function (value){
return !value ? value : String(value).replace(/&/g, "&").replace(/\"/g, """).replace(/</g, "<").replace(/>/g, ">");
}
所以我怀疑出现乱码的原因就是,gridComplete回调函数触发执行的时候,内部逻辑间接调用了jqGrid的html编码函数htmlEncode(动态添加行数据addRowData函数内部可能调用了html编码逻辑)。
把autoencode参数设置为false,果然正常。
本来懒得再码关于前端的文字的,可是在这个小问题上花了较长时间感觉很不值得,只能自我安慰贴一下算是经验值的提升吧。
参考:
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:change#jqgrid_3.5.2_changes_and_fixes
jqGrid的autoencode参数设置为true在客户端可能引发的编码问题的更多相关文章
- 连接数据库超时设置autoReconnect=true
1,问题现象: com.mysql.jdbc.CommunicationsException: The last packet successfully received from the serve ...
- 线程池ThreadPoolExecutor参数设置
线程池ThreadPoolExecutor参数设置 JDK1.5中引入了强大的concurrent包,其中最常用的莫过了线程池的实现ThreadPoolExecutor,它给我们带来了极大的方便,但同 ...
- in_array 的第三个参数strict设置为 true
var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类 ...
- 如何把in_array 的第三个参数strict设置为 true
var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...
- Hibernate 参数设置一览表
Hibernate 参数设置一览表 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 fu ...
- 使用MEF实现通用参数设置
通用后台管理系统必备功能模块包含日志管理,权限管理,数据字典,参数配置等功能.参数设置主要用于设置系统运行所需的一些基础性配置项,比如redis缓存,mq消息队列,系统版本等信息.好的参数设置需要达到 ...
- tomcat安装服务和内存参数设置
第一:安装服务 在dos窗口进入到tomcat的bin目录下,通过如下命令即可将tomcat安装成服务 service.bat install Tomcat2 其中Tomcat2是服务的名称 如果启动 ...
- HttpClient_使用httpclient必须知道的参数设置及代码写法、存在的风险
结论: 如果使用httpclient 3.1并发量比较大的项目,最好升级到httpclient4.2.3上,保证并发量大时能抗住.httpclient 4.3.3,目前还有一些bug:还是用4.2.x ...
随机推荐
- WooCommerce插件设置教程之设置主页
http://demo.themes4wp.com/documentation/homepage-setup/#videoimage-tutorial
- SQL Server 得到数据库中所有表的名称及数据条数
--方法一if exists ( select * from dbo.sysobjects where id = object_id(N'[dbo].[TableSpace]') and object ...
- 动态更换应用Icon
转:原理1--activity-alias 在AndroidMainifest中,有两个属性: // 决定应用程序最先启动的Activity android.intent.action.MAIN // ...
- react native 多选按钮
在做项目的时候有一个需求,是可以选择多个条件的,特地在Github上找了一些案例,发现没有什么合适的,于是自己根据这些案例,改装一下,封装了一个合适自己的.先看我封装的代码. import React ...
- R语言绘制空间热力图
先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...
- MongoDB-分片
1 分区12 分区23 路由服务器实例-mongos(客户端访问它)4 配置服务器实例-config 1 分片 cd /d D:\Test\bin1 10001 2 分片 cd /d D:\Test\ ...
- bootstrap之排版类
bootstrap之排版类
- web常见错误提示总结
在写web程序的时候,经常会出现一些网页错误的数字提示,如果能够明白这些提示的含义,那对于调试程序是有极大帮助的.网上有很多这方面的总结,但为了适应自己的阅读习惯,以及日后的查找方便,就做了一些修改并 ...
- 解决FF浏览器无法执行window.close()脚本
在FF浏览器中输入about:config 查找dom.allow_scripts_to_close_windows 将值改为true
- python反射问题
python中的__import__是以字符串的形式反射导入模块并以字符串的形式执行函数