2014-04-23 3 views
1

양식 매개 변수로 JSON을 보내는 데 문제가 있습니다. I는 다음과 같은 코드를 가지고 형태가 제출 스프링 MVC 컨트롤러 메소드는 수신 한 후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"}" 

평가 '을 (를)'columnsToTitles '요청 매개 변수로 사용하십시오. 이전에 비슷한 인코딩 기술을 사용했고 효과가있었습니다. 왜 나는 단지 "{"를 매개 변수로 받습니까? 이견있는 사람?

+0

처럼 보일 것이다 값 탈출 할 수 ? Ext가없는 정규 양식을 제출하지 않으시겠습니까? JSON을 필드 중 하나에 넣고 필드 중 하나에 JSON이 포함 된 양식을 제출할 수 있는지 확인하십시오. 또한 전선을 통해 전송 된 데이터에 액세스하는 데 사용하는 코드를 게시하십시오. –

+0

올바른 데이터를 전송하지 않는 네트워크 탭을 선택했습니다. "쿼리 문자열 매개 변수"에서 다음을 찾았습니다. :: columnsToTitles : {및 reportName : WI 보고서 – vinay

+0

양식의 대상이 파일 다운로드를 위해 숨겨진 iframe이기 때문에 일반 양식을 사용하지 않습니다. – vinay

답변

1

문제는 DOMHelper이 JSON 문자열의 따옴표를 올바르게 이스케이프 처리하지 못한다는 것입니다. 자동으로 이전 HTML 이스케이프 다른 임의의 속성의 값이 현재되지 않습니다 : 그것은

참고이 기능이 명확하게 문서에 기록됩니다

<input name="columnsToTitles" value="{"title":"Title","seqTask":"SeqTask","platform":"Platform"}"> 

처럼 보이는 입력 필드를 생성하는 것 요소의 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])) 
    }, 

그런 다음 귀하의 의견 태그가 확실 전체 JSON 문자열이 전송되는 확인하기 위해 네트워크 탭을 확인 했

<input name="columnsToTitles" value="{&quot;title&quot;:&quot;Title&quot;,&quot;seqTask&quot;:&quot;SeqTask&quot;,&quot;platform&quot;:&quot;Platform&quot;}"> 
+0

양식이 적용됩니다. 고맙습니다 – vinay

0

form.submit() 작업은 JSON 형식을 올바르게 보낼 수 없습니다. Ext.Ajax.Request을 사용할 수 있습니다. 나는 이것이 더 나은 접근이라고 생각한다. 예는 here입니다.

+0

제출시 JSON을 보낼 수 없다는 것을 지적하십시오. 텍스트 필드가 있고 JSON을 입력하면 문제없이 전송되지 않습니까? 서버에서 인코딩하는 것이 문제 일 가능성이 높습니다. –

+0

파일 다운로드 용이므로 Ajax가 작동하지 않습니다. 이전에는 입력 필드가있는 숨겨진 양식을 사용하여 매개 변수를 보유한 다음 요청을 제출했습니다. Ext.util.JSON.encode (ExtJS 3)와 함께 작동했습니다. ExtJS 4를 사용하고 있는데 Ext.JSON.encode 메소드 만 있고 작동하지 않습니다. 또 다른 차이점은 ExtJS 3입니다. ExtJS4에서는 Ext.DomHelper를 사용하는 반면 HTML을 사용하여 양식을 만듭니다. – vinay

+0

@JuanMendes 추가 서버의 인코딩에 대해 좀 더 자세히 설명해 주시겠습니까? – vinay