컴퓨터 이야기/프로그래밍

Ajax 를 유사하게 여러번 호출하는 경우 소스 단순하게 만들기

래빗 크리스 2010. 2. 22. 23:30



JQuery 나 기타 등등의 라이브러리를 사용하는 방식이 아니라 간단하게 Ajax 를 구현하는 경우,
각각의 기능을 자바스크립트 함수로 만들때 마다 반복되게 하지 않고 한번만 정의하는 방법을 소개한다.

doAjax 라는 함수를 두어서 Ajax 로 호출될 URL 과 파라미터, Ajax 성공시 호출될 함수명을 기술.
파라미터가 더 필요한 경우 arguments 를 이용하여 전달. arguments[0] 는 첫번째 파라미터..
goWhere 함수는 페이지 전환을 대신할 Ajax 호출.
goWhere 함수가 doAjax 호출하면, Ajax 성공시 파라미터로 넘어온 함수명 doAfterAjax 를 호출.

01 function doAjax(u,p,f){
02  var args = doAjax.arguments;
03  var xmlHttp = getXmlHttpRequest();
04  xmlHttp.open("POST", u, false); // POST 방식, GET 방식 선택
05  xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=euc-kr'); // EUC-KR
06  xmlHttp.setRequestHeader('Cache-Control','no-cache,must-revalidate'); // 캐시 없앰
07  xmlHttp.setRequestHeader('Pragma','no-cache'); // 캐시 없앰
08  xmlHttp.onreadystatechange = function() {
09   if(xmlHttp.readyState==4){
10    if(xmlHttp.status==200){
11     window[f](args[3], xmlHttp); // args[3] 은 4번째 파라미터를 의미, xmlHttp 는 Ajax 결과물
12    }
13   }
14  }
15  xmlHttp.send(p); // get 방식이면 p 대신 null
16 }
17
18
19 function goWhere(where){
20  var url, params;
21  if(where=='AA') url = '...';
22  else if(where=='BB'){
23   url = '...';
24   params = '';
25  }else if(where=='CC') url = '...';
26  else if(where=='DD') url = '...';
27
28  doAjax(url,params,'doAfterAjax',where);
29 }
30
31
32 function doAfterAjax(where,xmlHttp){
33  if(where=='AA'){
34   document.getElementById('idContent1').innerHTML = xmlHttp.responseText;
35  }
36 }