티스토리 뷰

 

에휴...뭐라 드릴말씀이 없을정도로 바쁘네요....

여기 주인장도 맨날 옆에서 일하느라 죽어나고....저도 요즘 눈코뜰새없이 바쁘고....

일이 좋아라 한다고는 하지만......ㅠ.ㅠ 가끔은 울고 싶을정도의 일이 몰려드는...흑흑.....

ㅡㅡ;죄송합니다..갑작스럽게 푸념을...ㅎㅎㅎ

좀힘들더라도...제가 해본내용은 올려보지요~~^^물론 회사에서 써먹었던거구요...^^

 

우선 기본적인 폼부터 알아보죠..뭐...대부분 이글을 읽고 계신정도면...ASP의 기본은 아실꺼라..굳게 믿기때문에

ASP에 관한 자세한 내용은 안올리겠습니다....물론 ASP부분은 정말(무쟈게..)가벼운정도로만 씁니다...ㅋㅋ(다 초보잖아요..나도 그렇고..^^)

또...잡소리가..ㅡㅡ;

 

우선 기본적인 폼을  놓습니다.

<html>
<head>
 <script type="text/javascript" src="/js/js.js"></script>
 <meta http-equiv="content-type" content="text/html; charset=euc-kr"/>
 <title>Post테스트</title>
</head>
<body>
 <h3>정보입력</h3>
 <form action="javascript:void%200" onsubmit="sendData();return false">
  <table border="1">
   <tr>
    <td>이름적고</td>
    <td><input type="text" name="name" size="20" ></td>
   </tr>
   <tr>
    <td>성별적고</td>
    <td><input type="text" name="sex" size="20"></td>
   </tr>
   <tr>
    <td>전화번호</td>
    <td><input type="text" name="phone" size="20"></td>
   </tr>
   <tr>
    <td colspan="2"><button type="submit">전송</button></td>
   </tr>
  </table>
 </form>
</body>
</html>

설마......여기 html에서 이해가 안간다고 말씀주시면......ㅡㅡ;

아...form에 action을 저렇게 준 이유를 잘 모르실수도 있겠네요..^^

저렇게 준이유는..

폼 전송이 일어날 때 자바 스크립트 함수가 호출돼야 하는데 그럴려면 폼의 action이 실행되지 않아야하므로....

저렇게 준거구요...그럼 왜!!앞의 javascript는 쓴건 알겠는데 void%200은 뭐야!!이렇게 화를 내실지 모르시는 분들을 위해..

그부분은 void(빈칸)0 ==> (빈칸) = %20이라 이거죠!! 이해되셨습니까??ㅋㅋ 뭐 딱 정의 내리면!!폼을 적돼!!실행하지마라!!이거죠

혹....다른 문의가 있으시다면...저한테 메일을 주시거나..카페주인장한테 메일주시길..자세히 알려줄껍니다..ㅋㅋ

위처럼 적으신다면..아래 그림처럼 나오겠지요??당근히!!


 
자 그럼 여기서.....onSubmit을 했으니...그쪽 함수로 가겠죠??슝~~~~~~~~~~~~~~~~~~~
근데 위에 함수가 안적혀있는걸로 봐서..
<script type="text/javascript" src="/js/js.js"></script> 요놈에게 있을꺼란 얘기...^^
그럼 요놈을 한번 살펴보실까요??? 근데 소스가 제가 잘 정리한다고 했는데도 약간 기네요....원래...AJAX가 막코딩의 도를넘어선 놈이라...ㅡㅡ;
한번 찌끄려보죠....ㅋㅋ
 
var request;
var queryString;
 
function sendData(){
 setQueryString();
 var url = "
http://localhost/test.asp";
 httpRequest("post",url,true);
}
 
function setQueryString(){
 queryString = "";
 var frm = document.forms[0];
 var numberElements = frm.elements.length - 1;
 for(var i = 0; i < numberElements; i++){
  if(i < numberElements-1){
   queryString += frm.elements[i].name + "=" + encodeURIComponent(frm.elements[i].value) + "&";
  }else{
   queryString += frm.elements[i].name + "=" + encodeURIComponent(frm.elements[i].value);
  }
 }
}
 
function httpRequest(reqType,url,asynch){
 try{
  request = new XMLHttpRequest();
 }catch(trymicrosoft){
  try{
   request = new ActiveXObject("Msxm12.XMLHTTP");
  }catch(othermicrosoft){
   try{
    request = new ActiveXObject("Microsoft.XMLHTTP");
   }catch(failed){
    request = null;
   }
  }
 }
 
 if (request == null){
  alert("객체가 생성되지 않았습니다.");
 }else{
  initReq(reqType,url,asynch);
 }
}
 
function initReq(reqType,url,isAsynch){
 request.onreadystatechange = handleResponse;
 request.open(reqType,url,isAsynch);
 request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=euc-kr");
 request.send(queryString);
}
 
function handleResponse(){
 if(request.readyState == 4){
  if (request.status == 200){
   alert(request.responseText);
  }else{
   alert("상태코드 확인!!");
  }
 }
}


흠...적어놓긴 했지만...역시나 복잡한!!!!ㅋㅋ
아마 위에 카페주인장님이 적어놓으신 그을 읽으셨으면...여기 있는건 90%는 이해가가실껍니다..^^
자 그럼 하나씩 살펴볼까요~~~
 
우선 !!! 요 두놈!!
var request;
var queryString;
 
자주 쓸꺼니까...전역변수로 만들어버린거죠....^^
그런다음 우리가 원했던 함수!!!sendData()가 나옵니다!!!
 
function sendData(){
 setQueryString();  
 var url = "
http://localhost/test.asp";
 httpRequest("post",url,true);
}
 
setQueryString();를 들어가자 마자 호출을 해버리네요....그럼 시키는데로 가야죠..뭐..힘이있나요...ㅡㅡ;
 
function setQueryString(){
 queryString = "";
 var frm = document.forms[0];
 var numberElements = frm.elements.length;
 for(var i = 0; i < numberElements; i++){
  if(i < numberElements-1){
   queryString += frm.elements[i].name + "=" + encodeURIComponent(frm.elements[i].value) + "&";
  }else{
   queryString += frm.elements[i].name + "=" + encodeURIComponent(frm.elements[i].value);
  }
 }
}
 
자...이쪽으로 왔더니..뭔가 복잡해보입니다...ㅡㅡ;
그래도 천천히 해보죠..하나씩~하는게 젤 중요..^^
우선 queryString를 빈값으로 놓고...
처음form을 변수 frm에 담아서~~~그 frm의 element의 숫자를 numberElements란 변수에 담습니다!!여기까지 이해안가시는분!!손!!
없네...ㅡㅡ;
그런다음 for문으로 해서!! numberElements만큼 돌려주는겁니다..근데!!
저기 -1은 뭐게요??
저기 -1은 버튼도 element에 들어가기 때문에 일부러 하나를 빼줬습니다..순수 textbox값만 가지고 올려고 한거죠....잘했죠???움홧홧..
자 queryString에 뭐가 들어갈까요?? 당연히 폼이름=값&폼이름=값&폼이름&값 이렇게 들어가겠죠...예를 들면..
name=서&sex=남&phone=111-2222 이런식으로요~~^^ 자..그럼 여기 부분도 끝났고!!!!
 
그런다음 setQueryString를 부른 sendData로 다시 돌아갑니다....당연히 queryString값을 가지고요~~^^
이부분이 나오는데요...

httpRequest("post",url,true);
 
초심자쪽 글을 읽었으면 이부분은 아실겁니다.혹 모르는 분들을 위해...url은 서버쪽 url이 되구요...
또 이놈이 httpRequest()를 호출하네요...세가지의 값을 가지고...위세가지의 값은 초심자쪽에 있으니까...한번 쏵~읽어보신다음에..
밑으 부분을 보시기 바랍니다...모르신다면~~말이죠...^^
 
그럼....당연히
function httpRequest(reqType,url,asynch){
 try{
  request = new XMLHttpRequest();
 }catch(trymicrosoft){
  try{
   request = new ActiveXObject("Msxm12.XMLHTTP");
  }catch(othermicrosoft){
   try{
    request = new ActiveXObject("Microsoft.XMLHTTP");
   }catch(failed){
    request = null;
   }
  }
 }
 if (request == null){
  alert("객체가 생성되지 않았습니다.");
 }else{
  initReq(reqType,url,asynch);
 }
}
 
이쪽으로 가서 어랏~초심자에서 나온 객체를 생성하는 부분이네요...^^객체생성부분도 초심자쪽에서 읽어보셔야지만 도움많이 되실겁니다...^^ 자 객체생성이 완료가 되면...initReq()를 호출하네요..아까의 3가지의 값을 가지고~~^^
 
function initReq(reqType,url,isAsynch){
 request.onreadystatechange = handleResponse;
 request.open(reqType,url,isAsynch);
 request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=euc-kr");
 request.send(queryString);
}

 

이부분으로 넘어와서는 젤 중요한게 여기에서 많이 써있네요...^^

초심자쪽에서 보셨겠지만..onreadystatechange...이부분은 서버가 자료를 받아온 다음에 뭘해야할지를 가리켜주는겁니다...

당연 handleResponse를 다시 호출하라고 적혀있네요..(참고로..()는 안쓰셔야 해요..ㅋㅋ쓰면 바로 스크립트 에러남..ㅡㅡ;)

자 그다음에 초심자쪽에서 배운게 또나오네요..계속 나오네~~좋아~~ㅋㅋ

중요한 open을 해주는것이죠~~오~~좋아....ㅋㅋ세가지 항목...아까 해주었던..post,서버url,true 이 세가지를 가지고!!open을 시켜주는 겁니다....

 

자 그밑에거는 처음 보셨을텐데요...흠...이놈이 바로..헤더 설정을 하는 놈입니다..

헤더 설정은 GET방식이 아닌 POST방식으로 보낼경우 요청을 위해 Content-Type헤더를 설정하는겁니다....

GET방식에서는 send할때 null로 해주지만 이놈은 값을 넘겨야 하기때문에 헤더를 적고 가지고 있던 queryString을 send해주는거죠..

자..이제 거의 끝나가는데요~~

 

서버쪽의 주소를 보면..

 
 
이렇게 되어있지 않습니까??
그럼 당연히 서버쪽 이파일도 만드셔야겠죠??
 
<% Session.CodePage = 949 %>
<%
Response.CharSet = "euc-kr"
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "Expires","0"
name = trim(request("name"))
sex = Trim(Request("sex"))
phone = Trim(Request("phone"))
Response.Write "이름:" & name & "|성별:" & sex & "|핸드폰번호:" & phone
%>

 

아주 간단하지 않습니까??제가 처음에 말씀드린것처럼...^^

단지 Request받은 값을 Write해주는것 뿐이죠~~^^움홧홧....

위에 코드페이지하고 charset/addheader은 asp를 아신다면...이해하실듯 한데 자세한건 나중에 적도록 하고.....

우선 저건 기본적으로 적어주시고 그밑에는 받은값을 다시 write해서 찍어주는것 뿐입니다....하지만...이값은...javascript의 alert창으로 보여줄꺼란거....^^

 

자 js의 마지막 부분....입니다...


function handleResponse(){
 if(request.readyState == 4){
  alert(request.status);
  if (request.status == 200){
   alert(request.responseText);
  }else{
   alert("상태코드 확인!!");
  }
 }
}
 
서버에서 실행되어서 브라우져가 해야할일은 바로 이놈입니다...^^
자...저기서 준비상태는 무조건 4 입니다....준비상태에 대한 얘기는 제가 초심자쪽에 써놓을께요....
그리고 서버로부터의 상태코드는 정상 적이면..200입니다...전 이거 테스트하면서 여러 상태코드 에러를 봐왔는데..
희안한것도 많더라고요...ㅋㅋ 제 블러그에 있는것 이외에도 굉장히 많습니다...^^
자....저기서...이제 정상적으로 되었다면..요청객체에서..responseText는 서버로부터 온값을 읽는거죠~~^^
그걸 alert창으로 띄운다는 뜻이고요~~~
 
정상적으로 되었다면... 이름:ooo|성별:o|핸드폰번호:ooooooo 이렇게 alter창이 뜰겁니다....
흠.....여기까지 순조롭게 되셨다면...뭐....
천재이십니다!!!!움홧홧...전 머리가 나빠서..ㅠ.ㅠ
 
암튼....긴 글을 읽어주시느라 고생하셨구요..전 다음글을 쓰기위해 다시 준비를...ㅡㅡ;슝~~
 
다들 좋은꿈꾸세요~~^^
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크