【问题标题】:jqgrid 4.13.1 search filter errorjqgrid 4.13.1 搜索过滤器错误
【发布时间】:2016-03-16 10:15:34
【问题描述】:

我使用 jqgrid 4.13.1。在 jqfiddle 示例 http://jsfiddle.net/9ezy09ep/162/ 中,当我尝试像这样过滤列表时(重要:将 %tab% 替换为 tab char,ascii value=9):

客户 ID > 包含 > %tab%HANAR

我在文件 jquery-1.12.0.min.js 中得到错误:

SyntaxError: JSON.parse: bad control character in string literal at line 1 column 67 of the JSON data

jqgrid过滤器的value字段中的tab字符如何转义?

【问题讨论】:

    标签: javascript jquery jqgrid free-jqgrid


    【解决方案1】:

    我分析了问题。问题的存在是因为在 free jqGrid 4.13.1 的代码的the line 中使用了xmlJsonClass.toJson。该行来自旧的 jqGrid(参见here)。我想已经删除了xmlJsonClass.toJson 的使用并只使用JSON.stringify,但我保留了旧方法的使用,希望与旧版本的jqGrid 保持更好的兼容性。

    问题在于 JSON 标准(参见 here要求仅转义 "\ 符号和其他一些符号,如制表符,可能是 > 转义:

    xmlJsonClass.toJson 方法生成字符串,转义制表符(转换为两个字符\t)和JSON.stringify 不要这样做。

    问题在一个反序列化 postData.filters 使用$.parseJSON 之后出现,它在内部调用JSON.parse

    我对搜索对话框的代码进行了修改,以使用JSON.stringify 作为首选(在所有现代网络浏览器中都存在,并且可以通过包含json2.js 将其包含在旧网络浏览器中)。我将继续将xmlJsonClass.toJson 仅用于备用方案。

    我将the fix 提交给 GitHub,从而解决了问题。请参阅http://jsfiddle.net/OlegKi/9ezy09ep/163/,它使用来自 GitHub 的最新资源。

    【讨论】: