XML DOM - XMLHttpRequest 객체
- 이전 페이지 DOM Text
- 다음 페이지 DOM XMLSerializer
XMLHttpRequest 객체
XMLHttpRequest 객체는 HTTP 프로토콜에 완전한 접근을 제공하며 POST 및 HEAD 요청과 일반 GET 요청을 할 수 있는 능력을 가지고 있습니다. XMLHttpRequest은 동기나 비동기로 웹 서버의 응답을 반환할 수 있으며, 텍스트나 DOM 문서의 형태로 내용을 반환할 수 있습니다.
尽管名为 XMLHttpRequest,它并不限于和 XML 文档一起使用:它可以接收任何形式的文本文档。
XMLHttpRequest 객체는 AJAX 의 웹 애플리케이션 아키텍처의 핵심 기능 중 하나입니다.
브라우저 지원
XMLHttpRequest이 모든 최신 브라우저에서 잘 지원됩니다. 유일한 브라우저 의존성은 XMLHttpRequest 객체 생성에 관련됩니다. IE 5와 IE 6에서는 특정 IE에 대한 ActiveXObject() 구조체를 사용해야 합니다. 그리고 XMLHttpRequest 객체 이 장에서 소개한 내용.
W3C 표준화
XMLHttpRequest 객체는 표준화되지 않았지만, W3C는 표준화 작업을 시작했습니다. 이 설명서에 소개된 내용은 표준화된 작업 초안에 기반합니다.
현재 XMLHttpRequest 구현은 상대적으로 일관되지만, 표준과 약간의 차이가 있습니다. 예를 들어, 일부 구현은 표준이 빈 문자열을 요구하는 null을 반환하거나, 구현이 readyState를 3으로 설정하면서 모든 응답 헤더가 사용 가능하다고 보장하지 않을 수 있습니다.
속성
readyState
HTTP 요청의 상태. XMLHttpRequest 객체가 처음 생성될 때, 이 속성의 값은 0부터 시작하여 완전한 HTTP 응답을 수신할 때까지 4로 증가합니다.
5개의 상태 중 각각은 관련 비공식적인 이름이 있습니다. 아래 표는 상태, 이름 및 의미를 나열합니다:
상태 | 이름 | 설명 |
---|---|---|
0 | Uninitialized | 초기화 상태. XMLHttpRequest 객체가 생성되었거나 abort() 메서드로 초기화되었습니다. |
1 | Open | open() 메서드가 호출되었지만 send() 메서드가 호출되지 않았습니다. 요청이 전송되지 않았습니다. |
2 | Sent | Send() 메서드가 호출되었으며, HTTP 요청이 웹 서버로 전송되었습니다. 응답을 수신하지 못했습니다. |
3 | Receiving | 모든 응답 헤더가 수신되었습니다. 응답 본문이 수신되고 있지만 완료되지 않았습니다. |
4 | Loaded | HTTP 응답이 완전히 수신되었습니다. |
readyState의 값은 abort() 또는 open() 메서드를 호출하면서 요청 처리 중에 증가하지 않습니다. 이 속성의 값이 증가할 때마다 onreadystatechange 이벤트 핸들러가 트리거됩니다.
responseText
서버에 수신된 응답 본문(헤더를 포함하지 않음)이나, 데이터를 수신하지 않았다면 빈 문자열입니다.
readyState가 3보다 작으면, 이 속성은 빈 문자열입니다. readyState가 3일 때, 이 속성은 이미 수신한 응답 부분을 반환합니다. readyState가 4일 때, 이 속성은 전체 응답 본문을 저장합니다.
응답이 응답 본문에 지정된 문자 인코딩의 헤더를 포함하고 있으면, 해당 인코딩을 사용합니다. 그렇지 않으면, Unicode UTF-8을 사용하도록 가정합니다。
responseXML
요청에 대한 응답을, XML로 해석하여 Document 객체반환합니다.
status
서버가 반환한 HTTP 상태 코드200으로 성공을 나타내고, 404로 "Not Found" 오류를 나타냅니다. readyState가 3보다 작을 때 이 속성을 읽을 때 예외가 발생합니다.
statusText
이 속성은 이름 대신 숫자로 지정된 요청의 HTTP 상태 코드입니다. 즉, 상태가 200일 때 "OK"이고, 상태가 404일 때 "Not Found"입니다. status 속성과 마찬가지로, readyState가 3보다 작을 때 이 속성을 읽을 때 예외가 발생합니다.
이벤트 핸들러
onreadystatechange
毎에 readyState 속성이 변경될 때마다 호출되는 이벤트 핸들러 함수입니다. readyState가 3일 때, 여러 번 호출될 수도 있습니다.
메서드
abort()
현재 응답을 취소하고 연결을 닫고 모든 미결 network 활동을 종료합니다.
이 메서드는 XMLHttpRequest 객체를 readyState가 0인 상태로 재설정하고 모든 미결 network 활동을 취소합니다. 예를 들어, 요청이 너무 오래 걸리면, 더 이상 필요하지 않은 응답이 있을 때 이 메서드를 호출할 수 있습니다.
getAllResponseHeaders()
HTTP 응답 헤더를 해석되지 않은 문자열로 반환합니다.
readyState가 3보다 작으면 이 메서드는 null을 반환합니다. 그렇지 않으면, 서버가 보낸 모든 HTTP 응답의 헤더를 반환합니다. 헤더는 단일 문자열로 반환되며, 행마다 하나의 헤더가 있습니다. 각 행은 개행 문자 "\r\n"으로 구분됩니다.
getResponseHeader()
지정된 HTTP 응답 헤더의 값을 반환합니다. 매개변수는 반환할 HTTP 응답 헤더의 이름입니다. 헤더 이름을 어떤 대소문자로 지정하든, 응답 헤더와의 비교는 대소문자 구분하지 않습니다.
이 메서드의 반환 값은 지정된 HTTP 응답 헤더의 값입니다. 이 헤더를 받지 못하거나 readyState가 3보다 작으면 빈 문자열입니다. 지정된 이름의 여러 헤더가 받혀오면 이 헤더의 값이 연결되어 반환되며, 각 헤더의 값을 구분하는 쉼표와 공백으로 구분합니다.
open()
예를 들어 URL과 HTTP 메서드와 같은 HTTP 요청 매개변수를 초기화하지만 요청을 보내지 않습니다.
send()
open() 메서드에 전달된 매개변수와 이 메서드에 전달된 선택적 요청 본문을 사용하여 HTTP 요청을 보냅니다.
setRequestHeader()
열려져 있지만 전송되지 않은 요청에 HTTP 요청을 설정하거나 추가합니다.
XMLHttpRequest.open()
HTTP 요청 매개변수를 초기화합니다
문법
open(method, url, async, username, password)
method 매개변수는 요청에 사용할 HTTP 메서드입니다. 값으로 GET, POST, HEAD이 포함됩니다.
url 매개변수는 요청의 주체입니다. 대부분의 브라우저는 동원 원칙 보안 정책을 시행하며, 이 URL이 스크립트를 포함하는 텍스트와 같은 호스트 이름과 포트를 가지고 있어야 합니다.
async 매개변수는 요청이 동기적으로 실행되어야 하는지를 나타냅니다. 이 매개변수가 false라면, 요청은 동기적이며 send()에 대한 호출은 응답이 완전히 수신될 때까지 블록됩니다. 이 매개변수가 true이거나 생략된 경우, 요청은 비동기적이며 일반적으로 onreadystatechange 이벤트 핸들러가 필요합니다.
username과 password 매개변수는 선택 사항이며, url에 필요한 인증 자격을 제공합니다. 지정되면, 이들은 url에 지정된 자격을 덮어씁니다.
설명
이 메서드는 send() 메서드가 나중에 사용할 수 있는 요청 매개변수를 초기화합니다. readyState를 1로 설정하고, 이전에 지정된 모든 요청 헤더와 이전에 수신된 모든 응답 헤더를 제거하고, responseText, responseXML, status 및 statusText 매개변수를 기본 값으로 설정합니다. readyState가 0일 때(XMLHttpRequest 객체가 생성되었을 때 또는 abort() 메서드가 호출되었을 때) 및 readyState가 4일 때(응답을 수신했을 때), 이 메서드를 호출하는 것은 안전합니다. 다른 모든 상태에서 호출할 때는 open() 메서드의 행동은 지정됩니다.
send() 메서드에 사용할 수 있는 요청 매개변수를 저장하고 XMLHttpRequest 객체를 재사용할 수 있도록 초기화하는 것 외에 open() 메서드는 다른 행동이 없습니다. 주의해야 할 것은 이 메서드가 호출될 때, 구현은 일반적으로 웹 서버로의 네트워크 연결을 열지 않는다는 점입니다.
XMLHttpRequest.send()
HTTP 요청을 전송합니다
문법
send(body)
open() 호출을 통해 지정된 HTTP 메서드가 POST 또는 PUT이면, body 파라미터는 요청체로 사용되며 문자열 또는 Document 객체요청체가 필요하지 않다면 이 파라미터는 null입니다. 다른 모든 메서드에서는 이 파라미터는 사용할 수 없으며 null이어야 합니다(일부 구현에서는 파라미터를 생략할 수 없습니다).
설명
이 메서드는 HTTP 요청을 전송합니다. 이전에 open()을 호출하지 않았거나, 더 구체적으로, readyState가 1이 아니라면, send()가 예외를 발생시킵니다. 그렇지 않으면, 이 메서드가 HTTP 요청을 전송하며, 다음과 같은 몇 가지 구성 요소로 구성됩니다:
- 이전에 호출된 open()에 지정된 HTTP 메서드, URL 및 인증 자격(있는 경우).
- 이전에 호출된 setRequestHeader()에 지정된 요청 헤더(있는 경우).
- 이 메서드에 전달된 body 파라미터.
요청이 발행되면, send()가 readyState를 2로 설정하고 onreadystatechange 이벤트 핸들러를 트리거합니다.
이전에 호출된 open() 파라미터 async가 false인 경우, 이 메서드는 블록하고 반환하지 않으며, readyState가 4이되고 서버의 응답이 완전히 수신될 때까지 기다립니다. 그렇지 않으면, async 파라미터가 true인 경우 또는 이 파라미터가 생략된 경우, send()가 즉시 반환되며, 나중에 설명할 것처럼, 서버 응답이 배경 스레드에서 처리됩니다.
서버가 HTTP 리디렉션을 포함한 응답을 반환하면, send() 메서드나 배경 스레드가 자동으로 리디렉션을 따릅니다. 모든 HTTP 응답 헤더가 수신되면, send()나 배경 스레드가 readyState를 3으로 설정하고 onreadystatechange 이벤트 핸들러를 트리거합니다. 응답이 길 경우, send()나 배경 스레드가 상태 3에서 onreadystatechange 이벤트 핸들러를 트리거할 수 있습니다: 이는 다운로드 진행指示자로 사용될 수 있습니다. 마지막으로, 응답이 완료되면, send()나 배경 스레드가 readyState를 4로 설정하고 마지막으로 이벤트 핸들러를 트리거합니다.
XMLHttpRequest.setRequestHeader()
문법
setRequestHeader(name, value)
name 파라미터는 설정할 헤더의 이름입니다. 이 파라미터는 공백, 콜론 또는 개행 문자를 포함하지 않아야 합니다.
value 파라미터는 헤더의 값입니다. 이 파라미터는 개행 문자를 포함하지 않아야 합니다.
설명
setRequestHeader() 메서드는 HTTP 요청 헤더를 지정하며, 이 헤더는 send() 호출을 통해 발행된 요청에 포함되어야 합니다. 이 메서드는 readyState가 1일 때만 호출할 수 있으며, 예를 들어, open() 호출 후, send() 호출 전에 호출할 수 있습니다.
지정된 이름의 헤더가 이미 지정되었으면, 이 헤더의 새 값은: 이전에 지정된 값에 쉼표, 공백 및 이 호출에서 지정된 값이 추가됩니다.
如果 open() 调用指定了认证资格,XMLHttpRequest 自动发送一个适当的 Authorization 请求头部。但是,你可以使用 setRequestHeader() 来添加这个头部。类似地,如果 Web 服务器已经保存了和传递给 open() 的 URL 相关联的 cookie,适当的 Cookie 或 Cookie2 头部也自动地包含到请求中。可以通过调用 setRequestHeader() 来把这些 cookie 添加到头部。XMLHttpRequest 也可以为 User-Agent 头部提供一个默认值。如果它这么做,你为该头部指定的任何值都会添加到这个默认值后面。
某些请求头部由 XMLHttpRequest 自动设置,而不是由该方法设置,以符合 HTTP 协议。这包括如下和代理相关的头部:
- Host
- Connection
- Keep-Alive
- Accept-charset
- Accept-Encoding
- If-Modified-Since
- If-None-Match
- If-Range
- Range
- 이전 페이지 DOM Text
- 다음 페이지 DOM XMLSerializer