2017-02-03 71 views
2

我有一个ExtJS网格,它具有提供所选行/记录对象的导出功能。问题是有一列有时会有特殊字符,特别是the less than char <,因此编码字符串会意外终止。JavaScript - 使用特殊字符对对象进行编码

这是我提交的下载代码:

Ext.dom.Query.selectNode("iframe[name=myiframe]").src = myDownloadUrl +"?records=" + Ext.encode(records); 

不完整的编码记录对象提交下载之后,当<字符存在:

records:[{"id":1141,"view_name":"freemarker","view_value":"< 

所以字符串被终止在第一个<焦炭。

在没有< char的行中,整个记录对象被提交并且一切正常。

感谢

回答

3

尝试URL编码记录Ext.Object.toQueryString(records)

实施例从documentation

Ext.Object.toQueryString({foo: 1, bar: 2}); // returns "foo=1&bar=2" 
Ext.Object.toQueryString({foo: null, bar: 2}); // returns "foo=&bar=2" 
Ext.Object.toQueryString({'some price': '$300'}); // returns "some%20price=%24300" 
Ext.Object.toQueryString({date: new Date(2011, 0, 1)}); // returns "date=%222011-01-01T00%3A00%3A00%22" 
Ext.Object.toQueryString({colors: ['red', 'green', 'blue']}); // returns "colors=red&colors=green&colors=blue" 

如果正在编码对象的数组可以:

Ext.Object.toQueryString({data:records},true) 

,你将有数据编码像data[0][id]=1141,data[0][view_name]=freemarker,data[1][id]=232,data[1][view_name]=abc,etc...

+0

在这种情况下,它提交了整个记录,但所有的键,如“id”,“view_name”,“view_value”等等变成0.任何想法? – stackato

+0

也许你正在编码一个数组。更新回答 – tonymayoral

+0

谢谢,这可以工作,但会需要一些后端更改。打开这个问题,看看有没有人有更好的解决方案 – stackato

相关问题