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在客户端可能引发的编码问题相关推荐
- Hive一些参数设置
在使用union all的时候,系统资源足够的情况下,为了加快hive处理速度,可以设置如下参数实现并发执行 set mapred.job.priority=VERY_HIGH; set hive.e ...
- autoreconnect mysql true_连接数据库超时设置autoReconnect=true
mysql经典的8小时问题 链自: http://blog.csdn.net/bluesnail216/article/details/15810119 参考http://www.wang1314.c ...
- 连接数据库超时设置autoReconnect=true
2019独角兽企业重金招聘Python工程师标准>>> 1,问题现象: com.MySQL.jdbc.CommunicationsException: The last packet ...
- Java命令 - 关于jvm性能优化与gc优化相关参数设置
java 工具的介绍 java - 启动java程序 简介 Windows: javaw命令与java相同,除了javaw没有相关的控制台窗口.当您不希望出现命令提示符窗口时,请使用javaw.然而, ...
- 【并发编程】线程池参数设置与动态调整
看了美团的一篇技术文章后才知道原来线程池的参数还可以动态调节. 一.场景分析 1.1 一个线程池中的线程异常了,那么线程池会怎么处理这个线程? public class ThreadPoolExecu ...
- mysql 禁用ssl连接_MySQL建立SSL连接问题,设置useSSL=false显式禁用SSL,或者设置useSSL=true...
You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide tr ...
- ROS导航包参数设置
首先了解在导航堆中,move_base包与其它包(如amcl.map_server)的关系,如图所示 在move_base节点运行前需要四个配置文件,这些文件定义了一系列相关参数,包括越过障碍物的代价 ...
- jqGrid multiselect多选模式下 multiboxonly设置为true 点击行原选中行会被重置问题处理
在之前的博文 "jqGrid 获取选中行注意事项及封装 直接返回行数据而不是rowId",曾提到过jqGrid在多选模式下,默认点击行即可选中.取消该行,如果表格构造的时候设置mu ...
- R语言merge函数全连接dataframe数据(Full (outer) join)、merge函数进行全连接必须将参数all设置为true(all=TRUE)、默认merge函数通过公共列名合并数
R语言merge函数全连接dataframe数据(Full (outer) join).merge函数进行全连接必须将参数all设置为true(all=TRUE).默认merge函数通过公共列名合并数 ...
最新文章
- 码农技术炒股之路——抓取日线数据、计算均线和除权数据
- http android下载工具,Android实现下载工具的简单代码
- android如何避免内存泄露,Android开发中应该避免的内存泄露
- 教你用Python爬虫自制有道翻译词典
- Serial Old收集器
- 这几个行业会从物联网革命中获得最大利益
- 【c++ primer】第八章 函数探幽
- Ubuntu Core for Raspberry Pi 使用笔记
- 为什么很少人写类似金庸的武侠小说
- leetcode算法88.合并两个有序数组
- 《结构分析的有限元法与MATLAB程序设计》笔记
- 小进阶:数据指标体系和数据治理的管理
- Excel表格中两列数据对比,找出异同的数据
- VUE项目中打印/转换图片打印
- 六则励志故事,送给程序员的你,希望从中获得启发与帮助!
- c语言double型小数点后几位小数,c语言double类型默认输出几位小数?
- 金融科技大数据产品推荐:易鑫大数据风控平台
- IOS开发工具介绍之Xcode开发工具使用
- 论文查重免费查重系统需要了解的常识
- C#验证歌得巴赫猜想