我遇到了将JSON作为表单参数发送的问题。我有以下代码:
form = Ext.DomHelper.append(document.body, {
action: '/exportExcel',
cn: [
{
tag:'input',
name : 'columnsToTitles',
value : Ext.JSON.encode(exportConfig[1])
},
{
tag:'input',
name : 'reportName',
value : 'Final Reports'
}
],
method: 'exportWorkItems' || 'GET',
tag: 'form',
target: frameId
});
form.submit();
form.onload = null;
form.parentNode.removeChild(form);
Ext.JSON.encode(exportConfig [1])求值为以下JSON字符串
"{"title":"Title","seqTask":"SeqTask","platform":"Platform"}"
表单提交后,Spring MVC控制器方法只接收" {"作为' columnsToTitles'请求参数。 我之前使用过类似的编码技术,但它起作用了。不知道我为什么只收到一个" {"作为参数。有什么想法吗?
答案 0 :(得分:1)
问题是DOMHelper
无法正确转义JSON字符串中的引号。它正在创建一个看起来像
<input name="columnsToTitles" value="{"title":"Title","seqTask":"SeqTask","platform":"Platform"}">
功能在文档
中有明确说明注意:对于其他任意属性,该值当前不是 在构建元素的HTML之前自动进行HTML转义 串。这意味着如果您的属性值包含特殊值 通常不允许在双引号中使用的字符 属性值,您必须事先手动对其进行HTML编码(请参阅 Ext.String.htmlEncode)或创建格式错误的HTML的风险。这个 行为可能会在未来的版本中发生变化。
因此,你可以逃避你的价值
form = Ext.DomHelper.append(document.body, {
action: '/exportExcel',
cn: [{
tag:'input',
name : 'columnsToTitles',
value : Ext.String.htmlEncode(Ext.JSON.encode(exportConfig[1]))
},
然后您的输入标记看起来像
<input name="columnsToTitles" value="{"title":"Title","seqTask":"SeqTask","platform":"Platform"}">
答案 1 :(得分:0)
form.submit()
操作无法正确发送JSON
格式。
您可以使用Ext.Ajax.Request
。我认为这是一种更好的方法。
一个例子是here。