반응형
Ajax 을 사용하여 Form 데이터를 POST 전송하고자 할 때 |
개발환경 : JDK 1.5, eclipse-galieo, window XP |
1. XMLHttpRequest.open 함수에 첫번째 파라미터로 POST 입력
2. XMLHttpRequest.send 함수에 key=value&key=value .. 로 값넣기
3. setRequestHeader 값 설정하기
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
request.setRequestHeader("Cache-Control","no-cache, must-revalidate");
request.setRequestHeader("Pragma","no-cache");
GET 방식과의 차이점인 위의 3가지를 셋팅해서 보내면 된다. 그런데 폼에 포함된 객체가
많을때에는 일일이 다 key=value 로 바꾸기가 만만치 않다. 그래서 javascript 로
자동 문자열을 구성할수 있도록 compFormPost 라는 함수를 만들었다. 인자로 form 명을
넣게 되면 폼에 포함된 객체들의 값을 key=value&key=value 로 조합해서 넘겨주게 된다.
이것을 send 함수에 그대로 넣으면 된다.
function compFormPost(frmObj) { var str = ''; var elm; var endName = ''; for (i = 0, k = frmObj.length; i < k; i++) { elm = frmObj[i]; switch (elm.type) { case 'text': case 'hidden': case 'password': case 'textarea': case 'select-one': str += elm.name + '=' + escape(elm.value) + '&'; break; case 'select-multiple': sElm = elm.options; str += elm.name + '=' for (x = 0, z = sElm.length; x < z; x++) { if (sElm[x].selected) { str += escape(sElm[x].value) + ','; } } str = str.substr(0, str.length - 1) + '&'; break; case 'radio': if (elm.checked) { str += elm.name + '=' + escape(elm.value) + '&'; } break; case 'checkbox': if (elm.checked) { if (elm.name == endName) { if (str.lastIndexOf('&') == str.length - 1) { str = str.substr(0, str.length - 1); } str += ',' + escape(elm.value); } else { str += elm.name + '=' + escape(elm.value); } str += '&'; endName = elm.name; } break; } } return str.substr(0, str.length - 1); } function findUser() { var request = createHttpRequest(); var url = "user_check.do"; // 폼에 포함된 객체들의 값을 key=value 형태로 만들어서 리턴한다. var param = compFormPost( [ form이름 ]); var result; request.open("POST", url, true); //POST 방식설정 /* POST방식으로 넘길 경우 아래 헤더를 반드시 설정해야 한다.*/ request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); request.setRequestHeader("Cache-Control", "no-cache, must-revalidate"); request.setRequestHeader("Pragma", "no-cache"); request.onreadystatechange = function() { msg.innerText = "로그인 처리 중..."; if (request.readyState == 4) { if (request.status == 200) { var xdoc = request.responseXML; var value = xdoc.getElementsByTagName("value"); try { result = value[0].firstChild.nodeValue; } catch (e) { value = request.responseText; login_msg_frame.document.write(value); msg.innerText = ""; return; } if (result == "true") { // 성공시 적절한 처리 } else { // 실패시 적절한 처리 } } else alert("status is " + request.status); } }; request.send(param); //파라미터 전송 }
반응형
'자바(JAVA)' 카테고리의 다른 글
JSP 페이지에서 contentType with different values 에러가 날 때 (0) | 2010.08.02 |
---|---|
input 박스에 자동 submit 막기를 위한 여러가지 방법 (6) | 2010.08.02 |
SQL Statement Log 를 보기위한 log4jdbc 사용법 (1) | 2010.08.02 |
Controller 영역인 브라우저에서의 단위테스트를 위한 HtmlUnit 사용하기 (0) | 2010.08.02 |
swing 으로 제작되었으며 아파치의 HttpClient 를 이용한 웹서비스에 파일 업로드하기 (7) | 2010.07.30 |
아파치에서 배포하는 HttpClient 3.x 를 이용해 네트워크 데이터 전송 (5) | 2010.07.30 |
JAVA 에서 데이터 교환을 위해 JSON 사용하기 (0) | 2010.07.20 |
google SMTP 를 이용해서 java 에서 Email 보내기 테스트 (1) | 2010.07.19 |