JSON作为表单参数

时间:2014-04-23 19:29:36

标签: java json extjs

我遇到了将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'请求参数。 我之前使用过类似的编码技术,但它起作用了。不知道我为什么只收到一个" {"作为参数。有什么想法吗?

2 个答案:

答案 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="{&quot;title&quot;:&quot;Title&quot;,&quot;seqTask&quot;:&quot;SeqTask&quot;,&quot;platform&quot;:&quot;Platform&quot;}">

答案 1 :(得分:0)

form.submit()操作无法正确发送JSON格式。 您可以使用Ext.Ajax.Request。我认为这是一种更好的方法。 一个例子是here