별도의 프레임 웍을 사용하지 않고, 기본적인 Ajax 를 다룰때 유념해야 할 몇가지 사항이 있다.
첫째, Ajax 로 불려지는 웹페이지와 Ajax 로 불러오는 웹페이지의 프로토콜이 같아야 한다.
둘째, 스타일시트와 자바스크립트의 정의는 Ajax 에서 하지 않는다.
셋째, Get 방식과 Post 방식을 사용할때 둘 간에는 약간의 차이가 존재한다.
넷째, Ajax 는 파라미터를 주고 받을때 UTF-8 을 사용한다.
자, 이제 이야기를 시작해 보자. 우선 첫번째 프로토콜.
여기서 말하는 프로토콜은 웹에서 사용하는 HTTP 와 HTTPS 를 말하는 것이다.
A.jsp 가 Ajax 기술(?)을 사용하여 B.jsp 를 불러올때,
A.jsp 가 HTTP 이면 B.jsp 도 HTTP 로 불러오고..
A.jsp 가 HTTPS 를 사용하고 있으면 B.jsp 도 HTTPS 로 불러오도록 한다.
A.jsp 와 B.jsp 가 동일 머신 안에 존재하건 다른 서버에 존재하건 상관은 없지만,
이러한 관계를 지키지 않는 경우에는 웹브라우저에 경고창이 뜨게 된다.
경고창에서 어떤 버튼을 클릭하느냐에 따라 세션이 유지되는 동안 B.jsp 가 보이지 않을 수도 있다는 야그.
프로토콜에 대한 정의 없이 사용하고 있다면 고민할 필요는 없겠지만,
http 나 https 를 기술할때 서로 어긋나게 되었다면 경고창은 여지없이 뜨게 된다.
여담이지만, iframe 을 사용한다면 HTTP 와 HTTPS 를 고민할 필요가 없다.
다만.. 물리적으로 다른 서버의 웹페이지를 iframe 에 담아 올때, iframe 을 resize 하는 것이 쉽지 않다.
된다고 하는 분도 있는데, IE 7.x 이후 버전에서는 어림도 없는 소리다.
(IE 7.x 나 IE 8.x 에서도 통용되는 resize 방법을 알고 있는 분이 계시면 이곳에 댓글을 바랍니다.)
두번째, 스타일시트와 자바스크립트.
위에서 예로 든, B.jsp 에 스타일시트와 자바스크립트를 정의해 놓고 사용하는 것은 NonSense, 아니 미친(?) 짓이다.
물론, B.jsp 하나만 웹브라우저에 띄우면 정상적으로 보인다.
그런데, A.jsp 에서 B.jsp 를 호출하면 어떻게 될까..? 물론 안 된다.
A.jsp 가 B.jsp 의 내용을 가져다 사용할때 responseText 를 사용하기 때문에 발생하는 문제.
그렇다면 responseHtml 은 없는가..? 아직은 없는 것같다. responseXML 은 있지만서도..
그러나, A.jsp 에 스타일시트와 자바스크립트를 정의해 두었다면, B.jsp 에서 이를 가져다 사용할 수는 있다.
세번째, Get 방식과 Post 방식.
두 방식의 차이점이 뭐 그리 대단할까 싶지만, 암튼 구현하는 방식에서는 차이가 난다.
아래 첫번째 박스가 POST 방식이고 다음 박스가 GET 방식으로 구현한 것이다. 결과는 동일하다.
function doChange(){ var f = document.forms['aform']; var url = '/.../B.jsp'; var params = 'param=' +f.param.value; var xmlhttp = getXmlHttpRequest(); xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=euc-kr'); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState==4){ if(xmlhttp.status==200){ document.getElementById('idTd).innerHTML = xmlhttp.responseText; } } } xmlhttp.send(params); } |
function doChange(){ var f = document.forms['aform']; var url = '/.../B.jsp?param=' +f.param.value; var xmlhttp = getXmlHttpRequest(); xmlhttp.open("GET", url, true); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState==4){ if(xmlhttp.status==200){ document.getElementById('idTd).innerHTML = xmlhttp.responseText; } } } xmlhttp.send(null); } |
세번째, UTF-8.
아, 우리는 언제쯤이면 N-byte 국민(?)의 한계를 이겨낼 수 있을까..?
가급적이면 파라미터를 사용할때 N-byte 인 한글은 사용하지 말고
Ascii 로 해독이 가능한 코드를 사용하게 되기를 바랄뿐이다.
아니면 A.jsp 와 B.jsp 모두 UTF-8 로 설정되고 저장되면 문제 없음.
다만A.jsp 와 B.jsp 모두 EUC-KR 이라면 B.jsp 를 호출할때 한글을 넘기지만 않으면.. 무난히 한글 구현이 가능하다.
이것도 서버 설정에 따라 달라지기는 한다.
마지막으로 상기 코드에 사용된 getXmlHttpRequest() 함수는 아래와 같다.
function getXmlHttpRequest(){ var xmlhttp = false; try{ xmlhttp = new XMLHttpRequest(); // for FireFox, Opera 8+, Safari, IE 7+ }catch(e){ try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); // for IE 6+ }catch(e){ try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // for IE 5.5+ }catch(e){ } } } return xmlhttp; } |
Fine.
'컴퓨터 이야기 > 프로그래밍' 카테고리의 다른 글
자바스크립트나 스타일시트를 JSP 에서 구현하는 이유..? (2) | 2009.08.08 |
---|---|
CSS 를 이용한 수직 가운데 정렬, table 태그냐 div 태그냐..? (8) | 2009.08.02 |
오라클 DB 의 Lock 을 염두에 둔, 레코드 업데이트 (4) | 2009.07.17 |
SSL, 이거 항상 좋은 것만은 아니네요. 사용자가 선택하게 해야 한다라니.. 유감입니다. (0) | 2009.07.16 |
본문에 사용된 HTML 태그를 관리자 화면에서 다루는 요령 (2) | 2009.07.15 |