我使用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?
答案 0 :(得分:2)
我分析了这个问题。问题的存在是因为在免费jqGrid 4.13.1的the line代码中使用xmlJsonClass.toJson
。该行来自旧的jqGrid(参见here)。我认为已经删除xmlJsonClass.toJson
的使用并仅使用JSON.stringify
,但我坚持使用旧方法,希望与旧版本的jqGrid保持更好的兼容性。
问题是JSON标准(请参阅here)要求仅转义"
和\
符号以及其他一些符号,例如tab,可以转义:
方法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的最新资源。