Post 방식으로 전송하는 것을 해보려고 하는데요.
이건 Asp&Ajax 에서 빵쓰님이 한번 쓰셨었던 강좌입니다. ㅋㅋ
완전 똑같죠 !
자. 시작해볼까요. 일단,
이렇게 폼을 만들었고요. 밑에 있는 테이블에는 전송이 완료되면 완료된 것을 다시 가져와서 저런 식으로 해줄 겁니다.
일단 우리가 잘 쓰는 request 만드는 함수를 쓰고요.
var request = null;
function createRequest(){
try{
request = new XMLHttpRequest();
} catch(trymicrosoft){
try{
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch(othermicrosoft){
try{
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch(failed){
request = null;
}
}
}
if(request == null) location.reload();
}
createRequest();
이 함수에 대한 설명은 지난 강좌들에서 설명했으므로 패스 -.
자자 그러면
요청함수와 받는함수를 만들어볼까요?
요청함수는 ajaxPostSend()로 받는함수는 ajaxPostRequest() 로 할 예정입니다.
폼의 html을 보자면
<form>
아이디 : <input type="text" name="userId"><br>
암호 : <input type="password" name="pwd"><br>
이름 : <input type="text" name="userName"><br>
<input type="button" value="전송" onclick="ajaxPostSend()">
</form>
<table border="1" width="300" height="200">
<tr>
<td id="requestResult"></td>
</tr>
</table>
button에 요청함수를 걸어서 전송할 수 있게 했고요.
테이블의 td 안에 id를 주어서 안에 돌려받은 것을 넣을 수 있게 해줍니다.
여기까지는 쉽지요?
요청함수입니다.
function ajaxPostSend(){
var url = "ajax_post.asp";
var postString = "";
postString = "userId=" + encodeURIComponent(document.getElementById("userId").value);
postString += "&pwd=" + encodeURIComponent(document.getElementById("pwd").value);
postString += "&userName=" + encodeURIComponent(document.getElementById("userName").value);
request.open("POST",url,true);
request.onreadystatechange = ajaxPostRequest;
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=euc-kr");
request.send(postString);
}
젤 중요한건. setRequestHeader 입니다.
get 방식은 요청Body가 비어있는 형식이지만 post 방식은 요청Body에 담아서 보냅니다.
그렇기에 지금 보내려는 정보가 어디 있는지 알려줘야 하는거죠.
setRequestHeader를 쓰지 않는다면 서버는 get 방식으로 데이터를 읽으려할 것입니다.
그렇기에 post 방식이라면 삭제해선 안되는 줄입니다.
postString 이라는 곳에 보낼 변수를 담습니다.
하지만, get과 마찬가지로 인코딩을 바꾸거나 escape 해주어야하죠.
제가 쓴 encodeURIComponent 함수는 utf-8 방식으로 인코딩합니다. 그래서 한글이 깨질 수 도 있는거죠.
한글을 생각하신다면 저 부분은 escape로 고쳐주시면 한글이 깨지지 않아요.
send에 우리가 만든 것을 담아서 보내버립니다.
get 방식이라면 요청본문이 null 이기에 null을 보내고
post라면 postString을 보낼것이기에 넣어주는 것이지요.
open함수의 첫번째는 POST로 알려주고 세번째인자의 동기/비동기 여부는 현재 비동기로 준 상태입니다.
제가 생각하기에는 POST로 보내고 디비에 insert를 시키는 작업이라면 동기로 주는 것도 낳을듯 하네요.
(이렇게 된다면 ajax를 쓰는 것보단 따로 페이지를 넘어갔다 오는 것이 효율적이겠지요)
이제는 받는 함수입니다.
function ajaxPostRequest(){
if(request.readyState == 4){
if(request.status == 200){
var strText = request.responseText;
document.getElementById("requestResult").innerHTML = strText;
}
}
}
간단하죠?
그냥 text 형식으로 가져와서 지정된 id의 innerHTML을 고치는 형식입니다.
요청처리 asp 페이지도 간단합니다.
<% Session.CodePage = 949 %>
<%
Response.CharSet = "euc-kr"
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "Expires","0"
response.write "사용자아이디 : " & request("userId") &"<br>"
response.write "사용자비번 : " & request("pwd")&"<br>"
response.write "사용자이름 : " & request("userName")
%>
한글이 깨지지 않도록 여러가지를 셋팅한후. 보낼 정보를 그냥 찍어버리는 거죠.
Post로 보내는 전송은 로그인쪽에서 쓰일 듯 하네요.
아니면 다중 select박스를 구현할때?
get과 post 방식 두가지로 ajax전송하는 법. 강좌를 다썼네요.
아마 이다음 강좌는 json으로 이중셀렉트 하기/post방식으로 file 보내기 둘중 하나가 될꺼 같습니다.
post 방식으로 file 보내기는 빵스님이 해주셨으면 하는 바램이 살-짝 있습니다. ㅎㅎ