AJAX - XMLHttpRequest

XMLHttpRequest 객체는 서버와 데이터를 교환하는 데 사용됩니다。

서버로 요청을 보냅니다

서버로 요청을 보내기 위해 XMLHttpRequest 객체의 open()send() 메서드:

xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
메서드 설명
open(method, url, async)

요청 유형을 정의합니다

  • method:요청 유형:GET 또는 POST
  • url:서버(파일)위치
  • async:true(비동기) 또는 false(동기)
send() 서버로 요청을 보냅니다(GET에 사용)
send(string) 서버로 요청을 보냅니다(POST에 사용)

GET이냐 POST이냐?

GET은 POST보다 간단하고 빠르며 대부분의 경우에 사용할 수 있습니다。

그러나 다음과 같은 경우 항상 POST를 사용하십시오:

  • 캐시 파일은 선택사항이 아닙니다(서버 상의 파일이나 데이터베이스 업데이트)
  • 서버로 많은 데이터를 전송합니다(POST는 크기 제한이 없습니다)
  • 사용자 입력을 전송합니다(알 수 없는 문자 포함),POST는 GET보다 더 강력하고 안전합니다

GET 요청

단순한 GET 요청:

예제

xhttp.open("GET", "demo_get.asp", true);
xhttp.send();

직접 테스트해 보세요

위의 예제에서 캐시된 결과를 얻을 수 있습니다. 이를 방지하기 위해 URL에 유일한 ID를 추가하세요:

예제

xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true);
xhttp.send();

직접 테스트해 보세요

GET 메서드로 정보를 보내려면 URL에 이 정보를 추가하세요:

예제

xhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true);
xhttp.send();

직접 테스트해 보세요

POST 요청

단순한 POST 요청:

예제

xhttp.open("POST", "demo_post.asp", true);
xhttp.send();

직접 테스트해 보세요

HTML 양식과 같이 데이터를 POST하려면 다음을 통해 setRequestHeader() HTTP 헤더를 추가하세요. 다음과 같이 send() 메서드에서 보내야 할 데이터를 정의합니다:

예제

xhttp.open("POST", "ajax_test.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Bill&lname=Gates");

직접 테스트해 보세요

메서드 설명
setRequestHeader(header, value)

요청에 HTTP 헤더 추가

  • header:헤더 이름
  • value:헤더 값

url - 서버 상의 파일

open() 메서드의 url 파라미터는 서버 상의 파일의 주소입니다:

xhttp.open("GET", "ajax_test.asp", true);

이 파일은 .txt와 .xml과 같은 모든 유형의 파일이 될 수 있으며, 서버 스크립트 파일(.asp와 .php)도 될 수 있습니다(이들은 응답을 보내기 전에 서버에서 작업을 수행할 수 있습니다).

비동기 - true 또는 false?

비동기적으로 요청을 보내기 위해:open() 메서드의 async 파라미터를 설정해야 합니다: true

xhttp.open("GET", "ajax_test.asp", true);

비동기적인 요청을 보내는 것은 웹 개발자에게 큰 진보입니다. 서버에서 수행되는 많은 작업은 매우 시간이 많이 걸립니다. AJAX 이전에는 이 작업이 애플리케이션을 대기 상태로 만들거나 중지시킬 수 있습니다.

비동기적으로 전송함으로써, JavaScript는 서버 응답을 기다리지 않고:

  • 서버 응답을 기다리는 동안 다른 스크립트를 실행
  • 응답이 준비되면 처리

onreadystatechange 속성

XMLHttpRequest 객체를 통해, 요청이 응답을 받았을 때 실행할 함수를 정의할 수 있습니다.

이 함수는 XMLHttpResponse 객체의 onreadystatechange 속성에서 정의된:

예제

xhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    document.getElementById("demo").innerHTML = this.responseText;
  }
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();

직접 테스트해 보세요

稍후의 장에서 onreadystatechange에 대해 더 많은 내용을 배울 수 있습니다.

동기 요청

동기적인 요청을 실행하려면, open() 메서드의 세 번째 매개변수로 설정됩니다 false

xhttp.open("GET", "ajax_info.txt", false);

async = false가 빠른 테스트에 사용되기도 하며, 더 오래된 JavaScript 코드에서 동기적 요청도 볼 수 있습니다.

서버가 완료될 때까지 코드가 기다리기 때문에 onreadystatechange 함수가 필요하지 않습니다:

예제

xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;

직접 테스트해 보세요

동기적 XMLHttpRequest (async = false)을 권장하지 않습니다. 왜냐하면 JavaScript는 서버 응답이 준비되기까지 실행을 멈추기 때문입니다. 서버가 바쁘거나 느리다면, 애플리케이션이 멈추거나 중지될 수 있습니다.

동기적 XMLHttpRequest은 Web 표준에서 제거되고 있지만, 이 과정은 많은 시간이 필요할 수 있습니다.

동기적 요청을 사용하는 것은 권장되지 않으며, 이 경우 InvalidAccessError 예외가 발생할 수 있습니다.