AJAX(Asynchronous JavaScript and XML)
웹 서버와 데이터를 교환하는 기술 중 하나.
- 서버(혹은 DB)에서 "데이터" 가져오기
- 사용자가 입력한 "데이터"를 서버(혹은 DB)에 저장하기
비동기적인 페이지 갱신!!
- 웹 페이지를 전체 갱신하는 것이 아닌, "일부만!"갱신
동기/비동기?
[동기:] 서버에 요청을 하고, 응답이 올때까지 "다른 작업을 하지 않고 기다리는" 것
[비동기:] 서버에 요청을 하고, 응답이 오기까지 "다른 작업을 하다가" 처리되면 그 작업을 이어가는 것
데이터 전송 형식:
1) XML
2) JSON
둘 중 하나로 전송한다.
데이터 처리:
- JavaScript
=> XML(JSON) 형식의 데이터가 들어온다
=> 해당 데이터를 해석한다(parse)
=> HTML DOM 모델을 이용하여 동적으로 갱신한다
XMLHttpRequest 객체
웹 서버와 http 통신을 위한 JS object이다.
DOM -> XML로 변환하여 송신
XML -> DOM로 변환하여 수신
갱신까지도.
ex. JS로 쓴 것과 jQuery로 쓴 것 비교
function getFromServer() {
var req;
if(window.XMLHttpRequest) { // IE7+, Chrome, Firefox..
req = new XMLHttpRequest(); // 선언
}
else { // IE6, IE5
req = ActiveXObject("Microsoft.XMLHTTP");
}
// 서버로부터 응답이 오면 반응하는 메소드
req.onreadystatechange = function () {
if(req.readyState == 4 && req.status == 200) {
document.getElementById("target").innerHTML = req.responseText;
}
}
req.open("GET", "testfile1.txt", true);
req.send();
}
- XMLHttpRequest 객체를 선언하는 것이 포인트 1.
- "응답이 오면"에 관한 메소드인 onreadystatechange 활용이 포인트 2.
- readyState 값은 5개로 다음과 같음
-readyState 값(0~4)-
0: req 초기화 안된 상태
1: 서버랑 연결했음
2: 서버가 req 받았음
3: 서버가 req 처리중..
4: 서버가 req 처리 완료, 응답... 한다?
- req.open 메소드 인자: 송신 방식(get, post), 데이터, 비동기식 사용 여부(true or false)
- req.send 보내야 진짜 보낸거
=> jQuery로 쓰면 엄~청나게 간소화된다.
$(document).ready(function() {
$("button").click(function() {
$.get("testfile1.txt", function(data, status) {
$("#target").text(data);
});
});
});
get메소드: 인자로 (요청 데이터, 요청후 처리 실행(응답=data, 상태=status) {...});
혹은 load 사용,
$(document).ready(function() {
$("button").click(function() {
$("#target").load("testfile1.txt");
});
});
load 메소드: 서버로부터 데이터 가져와서 대상(element)에 집어넣어주기.
(+ 문서의 특정 부분만 로딩할 수도 있다.. load("sample.html #myPara");)
Ajax 통신을 위한 jQuery Methods
load()
위에서 설명했죠?
$.ajax()
아래 3개의 메소드를 통합한 느낌의 메소드. POST, GET 방식 둘 다 가능.
HTML, XML, JSON, 텍스트 유형의 데이터 요청 가능.
$.post()
서버에 HTTP POST 방식 전송 후 응답 받기.
$.get()
서버에 HTTP GET 방식 전송 후 응답 받기.
$.getJSON()
서버에 HTTP GET 방식 전송 후 응답을 JSON 형식으로 받기.
$.ajax() 자세히
$.ajax({
url: "...", // 호출하는 웹 페이지(경로 등)
data: "...", // 서버에 데이터 전송
dataType: "...", // "html", "xml", "json", "text"
method: "POST", // "GET" 혹은 "POST" 중 택 1
...
// 필요한 것만 써주면 된다
})
.done(function() {}); // 전송 성공 시 처리
.fail(function() {}); // 전송 실패 시 처리
.always(function() {}); // 항상 처리
변수에 담아서 써도 당연히 된다.
var req = $.ajax({...});
req.done(function(data, status) {...});
...
'Computer Science > 웹 프로그래밍' 카테고리의 다른 글
XML and JSON (0) | 2024.07.29 |
---|---|
모듈의 개념과 express 모듈 (1) | 2024.07.25 |
Node.js 설치, 간단한 실행까지 (0) | 2024.07.24 |
캔버스와 JS(그림 그리기) (7) | 2024.07.23 |
정규 표현식의 활용 (0) | 2024.07.15 |