본문 바로가기

Web/Javascript

form 을 동적으로 생성해서 POST 방식으로 새 창에 전송

1.

아래와 같이 form 을 동적으로 생성해서 POST 방식으로 새 창에 전송하도록 코드를 작성했다.


  window.open(url,name, option);  


  var form = document.createElement("form");
  form.setAttribute("method", "post");
  form.setAttribute("target", name);
  form.setAttribute("action", url);


  var result = document.createElement("input");
  result.setAttribute("type","hidden");
  result.setAttribute("name","processingResult");
  result.setAttribute("value","<?php echo $processingResult;?>");

  form.appendChild(result);

  form.submit();


Chrome으로 확인하면서 개발 중이었는데, 크롬에서는 잘 작동하는 소스가 IE에서는 데이터가 넘어오지 않았다.

구글링 결과 appendChild가 정상 작동 안한다고 한다.


form 을 미리 생성해놓고 값만 넣어서 보내는 방식으로 변경해서 문제 해결.


<form name="resultHiddenForm" action="" method="post">
  <input type="hidden" name="processingResult" value=""/>
</form>

 var win = window.open(url, name, option); 
 
 var form = document.resultHiddenForm;
 form.action = url;
 form.target = name;
 form.method = "post";
 form.processingResult.value = "<?php echo $processingResult;?>";
 form.submit();


chrome 과 IE 에서 모두 정상 작동한다.


출처 | http://blog.naver.com/lionlyloveil/220514942093


2.

java script에서 window.open명령어로 새 창을 띄울수 있다.

문제는 데이터 전송을 get방식으로 한다는것.

이것을 post방식으로 전송할 수 있는 방법이 있는데, 방법이 좀 복잡하다..

아래가 예시 코드이다.


-------------------------------------------------------------------------------------------

function sendPost(){


    // 폼을 생성한다.

    var form1 = document.createElement("form"); // 폼 생성
    form1.setAttribute("method", "POST"); // 전송방식
    form1.setAttribute("action", "URL"); // 주소
    form1.setAttribute("target", "targetName"); // 타겟..(중요)
    document.body.appendChild(form1);


    // 입력창을 hidden타입으로 생성
    var formInput1 = document.createElement("input"); // 입력창 생성
    formInput1.setAttribute("type", "hidden"); // 타입
    formInput1.setAttribute("name", "payerJumin"); // name 속성
    formInput1.setAttribute("id", "payerJumin"); // id 속성
    formInput1.setAttribute("value", payerJumin); // 값
    form1.appendChild(formInput1); // 추가한당


    window.open('', "targetName"); //url없이 타겟만 지정한 후 폼 전송
    form1.submit(); // 새 창을 띄운 후에 폼을 전송

}

-------------------------------------------------------------------------------------------


스크립트내에서 폼을 생성하고, 값을 입력받아서 전송했다.

그래서 좀 복잡하다..;


그리고 form을 미리 생성해서 값을 입력받은 후 전송하면 되지 않느냐고 물을수도 있는데..

안해봤다. (아마 폼을 똑같이 생성해두고 타겟과 전송방식등을 지정해준 다음, window.open을 이용해서 전송하면 될것 같다.)

어제 일이 너무 바빠서, 이걸로 급하게 코딩하고, 확인해볼 시간이 없었다;;;;


어쨋든 이걸 응용하면, 데이터 전송시 스크립트단에서 이러한 가상의 폼(? / 묵시적인건가..)을 생성하여 데이터를 전송할 수 있다는걸 알수 있다.


출처 | http://blog.naver.com/swi0110/220416992381