XMLHttpRequest 객체

XMLHttpRequest 객체는 웹 페이지가 로드된 후 서버와 통신하는 방법을 제공합니다.

XMLHttpRequest 객체는 무엇인가요?

XMLHttpRequest 객체는개발자의 꿈그러니까, 당신은:

  • 페이지를 다시 로드하지 않고 웹 페이지를 업데이트
  • 페이지가 로드된 후 서버에서 데이터를 요청
  • 페이지가 로드된 후 서버에서 데이터를 수신
  • 백그라운드에서 서버로 데이터를 전송

모든 현대 브라우저는 XMLHttpRequest 객체를 지원합니다.

예제:텍스트를 입력할 때 서버와 XML HTTP 통신.

XMLHttpRequest 객체 생성

단一行의 JavaScript 코드로 XMLHttpRequest 객체를 생성할 수 있습니다.

모든 현대 브라우저에서(IE 7 포함):

xmlhttp=new XMLHttpRequest();

Internet Explorer 5와 6에서:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

예제

<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url)
{
xmlhttp=null;
if (window.XMLHttpRequest)
  {// 모든 새로운 브라우저의 코드}
  xmlhttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {// IE5와 IE6의 코드}
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=state_Change;
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
  }
else
  {
  alert("您的浏览器不支持XMLHTTP.");
  }
}
function state_Change()
{
if (xmlhttp.readyState==4)
  {// 4 = "loaded"}
  if (xmlhttp.status==200)
    {// 200 = OK}
    // ...여기에 코드...
    }
  else
    {
    alert("XML 데이터를 가져오는 문제");
    }
  }
}
</script>

TIY

주석:onreadystatechange은 이벤트 핸들러입니다. 그 값(state_Change)은 함수 이름이며, XMLHttpRequest 객체의 상태가 변경될 때 이 함수가 트리거됩니다. 상태는 0(uninitialized)에서 4(complete)까지 변경됩니다. 상태가 4일 때만 코드를 실행합니다.

Async=true를 사용하는 이유는 무엇인가요?

우리의 예제는 open()의 세 번째 파라미터에서 "true"를 사용했습니다.

이 파라미터는 요청이 동기 처리되는지 비동기 처리되는지를 정의합니다.

True는 스크립트가 send() 메서드 이후에도 서버 응답을 기다리지 않고 계속 실행될 것을 의미합니다.

onreadystatechange 이벤트는 코드를 복잡하게 만듭니다. 그러나 서버로부터 응답을 받지 않았을 때 코드가 중단되지 않도록 가장 안전한 방법입니다.

이 파라미터를 "false"로 설정하면 추가적인 onreadystatechange 코드를 제거할 수 있습니다. 요청이 실패했을 때 추가 코드를 수행할 필요가 없다면 이 파라미터를 사용할 수 있습니다.

TIY

더 많은 예제

XML HTTP를 통해 텍스트 파일을 div 요소에 로드합니다

XML HTTP를 통해 HEAD 요청을 수행합니다

XML HTTP를 통해 지정된 HEAD 요청을 수행합니다

XML HTTP를 통해 XML 파일의 데이터를 나열합니다

XML / ASP

당신은 XML 문서를 열고 서버에 있는 ASP 페이지에 전송하여 이 요청을 분석하고, 그 다음 결과를 반환할 수도 있습니다.

<html>
<body>
<script type="text/javascript">
xmlHttp=null;
if (window.XMLHttpRequest)
  // code for IE7, Firefox, Opera, etc.
  xmlHttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  // code for IE6, IE5
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlHttp!=null)
  {
  xmlHttp.open("GET", "note.xml", false);
  xmlHttp.send(null);
  xmlDoc=xmlHttp.responseText;
  xmlHttp.open("POST", "demo_dom_http.asp", false);
  xmlHttp.send(xmlDoc);
  document.write(xmlHttp.responseText);
  }
else
  {
  alert("您的浏览器不支持XMLHTTP.");
  }
</script>
</body>
</html>

VBScript로 작성된 ASP 페이지:

<%
xmldoc = Server.CreateObject("Microsoft.XMLDOM")
xmldoc.async=false
xmldoc.load(request)
xmldoc.documentElement.childNodes에서 각 x에 대해
   if x.NodeName = "to" then name=x.text
next
response.write(name)
%>

response.write 속성을 사용하여 결과를 클라이언트로 전송합니다.

TIY

XMLHttpRequest 객체는 W3C의 표준인가요?

W3C 추천 표준 중 어떤 것도 XMLHttpRequest 객체를 규정하지 않습니다.

그러나 W3C DOM Level 3의 "Load and Save" 규격은 일부 유사한 기능을 포함하고 있지만, 아직 어떤 브라우저도 이를 구현하지 않았습니다.

참조

XML DOM 참조 매뉴얼: XMLHttpRequest 객체