2009년 7월 7일 화요일

[Ajax] IE 7에서.. XMLHttpRequest 문제..

ajax로 이것 저것 만들 던 중.. 이상하게.. IE 6에서는 부드럽게 작동 하는데...
IE7 에서만..ㅜ.ㅜ 작동이 안되는 기능이 있다.
컴퓨터 사양에 따라 다르지만.. 내 컴퓨터는.. 이상하게 안되었다.

 - OS : Windows XP Professional June
 - Browser : IE 7

간단한 환경이긴 했지만.. 참으로 난감한 상황이였다.
이것 저곳을 찾다가 보니... IE 7에서는 XMLHttpRequest를 원래 지원 하고 있다는 글을 발견!! ^^
(구글에서 XMLHttpRequest 검색 해보면.. 엄청 나옴...ㅡㅡ;ㅋ )

그래서.. 처음에는 이부분을 지우고 하면 되는 것이었습니다.

====================================================================
if(window.XMLHttpRequest) {
  http_request = new XMLHttpRequest();
  if(http_request.overrideMimeType) {
   http_request.overrideMimeType('text/html');
  }
====================================================================


그러나.. 생각해보니.ㅡ.ㅡ; 내가 개발한 프로그램이 모질라나.. 사파리에서 안돌아 갈것을 생각하니 버리면 안되겠다는 생각이 들어서.. 저는 다음과 같이 소스를 수정해서 쓰고 있습니다.

====================================================================
if (window.ActiveXObject) {
  try {
   http_request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
   try {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (e) {
    try{
     http_request = new ActiveXObject("window.XMLHttpRequest"); //ie7전용
    }catch(e){}  
   }
  }
 } else if(window.XMLHttpRequest) {
  http_request = new XMLHttpRequest();
  if(http_request.overrideMimeType) {
   http_request.overrideMimeType('text/html');
  }
 }
 
 if(!http_request) {
  alert('Cannot create XMLHTTP instance');
  return false;
 }
=====================================================================


이렇게 쓰고 나서.. 밑에 값을 처리하는 부분에는

=====================================================================
if (http_request.readyState == 4) {
  if (http_request.status == 0) {
   result = http_request.responseText;
   alert(result);
  }else{
   result = http_request.responseText;
   alert("a");
  }
 }
<참고>
http_request.status의 값이 0은 Local상에 파일이 있을 경우 True가 되구요~ ^^
200인 경우에는 HTTP, 즉 웹상에 파일이 있을때.. True가 된답니다!
==================================================================


항상.. Status 및 readyState 값을 설정 해줘야.. "페이지에 오류가 있습니다"
이 놈이 안떠요..^^

도움이 되었으면 합니다! 혹시.. 잘못된거나.. 수정 부분있으시면 과감히!! 트랙백 달아 주세요!

댓글 없음:

댓글 쓰기