jqgrid 4.13.1搜索过滤器错误

时间:2016-03-16 10:15:35

标签: javascript jquery jqgrid free-jqgrid

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

客户ID>包含> %标签%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过滤器的值字段中的tab char?

1 个答案:

答案 0 :(得分:2)

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

问题是JSON标准(请参阅here要求仅转义"\符号以及其他一些符号,例如tab,可以转义:

enter image description here

方法xmlJsonClass.toJson生成字符串,该字符串会转义选项卡(转换为两个字符\t),而JSON.stringify则不会执行此操作。

在使用postData.filters进行反序列化 $.parseJSON之后,问题就会出现,JSON.parse会在内部调用JSON.stringify

我修改了搜索对话框的代码,使用xmlJsonClass.toJson作为首选(存在于所有现代网络浏览器中,并且可以通过包含json2.js包含在旧的Web浏览器中)。我将继续仅使用schema: { parse: function (data) { var items = []; for (var i = 0; i < data.data.length; i++) { if (data.data[i].CorrectValue != null && data.data[i].SearchValue != null) { $("#spnSR")[i].innerHTML = "<b>"+"Get results for this text: "+"</b>"+data.data[i].CorrectValue; $("#spnSV")[i].innerHTML = "<b>" + "Searched for this text: " +"</b>" + data.data[i].SearchValue; } } var product = { data: data.data, total: data.total }; items.push(product); return (items[0].data); }, }作为后备方案。

我向GitHub提交了the fix,解决了这个问题。请参阅http://jsfiddle.net/OlegKi/9ezy09ep/163/,它使用GitHub的最新资源。