AJAX란?
- Asynchronous Javascript And Xml(비동기식 자바스크립트와 xml)의 약자
- 자바스크립트를 이용해 서버와 브라우저가 비동기 방식으로 데이터를 교환할 수 있는 통신 기능
- 브라우저가 가지고있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법
즉, 쉽게 말하자면 자바스크립트를 통해서 서버에 데이터를 비동기 방식으로 요청하는 것이다.
비동기방식이란?
비동기 방식은 웹페이지를 리로드하지 않고 데이터를 불러오는 방식이며 Ajax를 통해서 서버에 요청을 한 후 멈추어 있는 것이 아니라 그 프로그램은 계속 돌아간다는 의미를 내포하고 있다
동기방식의 예로 form 안에 action = "url" type = "get" 형식을 들 수 있다. 이 요청이 브라우저가 새로고침이 된다고 합니다.! 비동기 방식은 웹이나 앱을 만들 때 부드러운 장면전환이 가능하다 정도로 생각하면 될 것 같아요
AJAX 동작원리
1. 클라이언트에서 자바스크립트 함수를 통해 AJAX요청을 한다.
2. XMLHttpRequest 객체의 인스터스가 생성된다.
3. XMLHttpRequest 를 통해 현재 HTML의 상태를 가진 XML 메시지를 구성하여 웹서버로 요청한다.
4.웹서버에서 처리 후 응답값을 XML 메시지를 보내 XMLHttpRequest 객체가 수신한다.
5.수신된 XML 메시지를 파싱하여 데이터를 업데이트한다.
AJAX 형식
$.ajax ({
url : "url", // (Required) 요청이 전송될 URL 주소
type : "GET", // (default: ‘GET’) http 요청 방식
async : true, // (default: true, asynchronous) 요청 시 동기화 여부
cache : true, // (default: true, false for dataType 'script' and 'jsonp') 캐시 여부
timeout : 3000, // (ms) 요청 제한 시간 안에 완료되지 않으면 요청을 취소하거나 error 콜백 호출
data : {key : value}, // 요청 시 전달할 데이터
processData : true, // (default: true) 데이터를 컨텐트 타입에 맞게 변환 여부
contentType : "application/json", // (default: 'application/x-www-form-urlencoded; charset=UTF-8')
dataType : "json", // (default: Intelligent Guess (xml, json, script, or html)) 응답 데이터 형식
beforeSend : function () {
// XHR Header 포함, HTTP Request 하기전에 호출
},
success : function(data, status, xhr) {
// 정상적으로 응답 받았을 경우 파라미터는 응답 바디, 응답 코드 그리고 XHR 헤더
},
error : function(xhr, status, error) {
// 응답을 받지 못하거나 정상적인 응답이지만 데이터 형식을 확인할 수 없는 경우
},
complete : function(xhr, status) {
// success와 error 콜백이 호출된 후에 반드시 호출, try - catch - finally의 finally 구문과 동일
}
});
- reponseTxt : 요청 결과
- statusTxt : 요청의 상태
- xhr : 요청한 오브젝트
- xhr.status 파일의 응답상태
콜백 동작 순서
성공 시 : success > complete > done > always
실패 시 : error > complete > fail > always
success와 .done()의 차이
success / error의 형태
$.ajax({
url: 'URL',
type: 'POST',
data: yourData,
datatype: 'json',
success: function (data, textStatus, xhr) { },
error: function (xhr, textStatus, errorThrown) { },
complete: function(xhr, status) { }
});
.done() / .fail()의 형태
$.ajax({
url: 'URL',
type: 'POST',
data: yourData,
datatype: 'json'
})
.done(function(data, textStatus, xhr) { });
.fail(function(xhr, textStatus, errorThrown) { });
.always(function(data|xhr, textStatus, xhr|errorThrown) { });
.then(function(data, textStatus, xhr|errorThrown) { });
형태를 보면 거의 유사하다는 것을 알 수 있는데 success는 jQuery에서 성공 콜백의 기본 이름으로, ajax 호출 옵션으로 정의된다. 그러나 $.Deferreds와 더 정교한 콜백의 구현 이후, done은 어떤 deferred에서도 호출될 수 있기 때문에 성공 콜백을 구현하는 데 선호되는 방법이다. 또한 promises 패턴인 .done()이 좀 더 깔끔하다
done의 장점
done의 좋은 점은 $.ajax의 반환 값이 이제 애플리케이션의 다른 곳과 연결될 수 있는 지연된 promise이라는 것.
그래서 ajax를 몇 군데 다른 곳에서 걸려고 한다면 이 ajax 호출을 만드는 함수의 옵션으로 성공 함수를 전달하는 대신, 함수 자체에서 $.ajax를 반환하고 콜백을 done, fail, then 등으로 바인딩할 수 있다. always은 요청의 성공 여부에 관계없이 실행되고 done는 성공할 때만 트리거 된다.
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json',
beforeSend: showLoadingImgFn
})
.always(function() {
// remove loading image maybe
})
.fail(function() {
// handle request failures
});
}
xhr_get('/index').done(function(data) {
// do stuff with index data
});
xhr_get('/id').done(function(data) {
// do stuff with id data
});
AJAX로 할 수 있는 것
AJAX라는 네트워크 기술을 이용하여 클라이언트에서 서버로 데이터를 요청하고 그에 대한 결과를 돌려받을 수 있다.
참고자료
'프로젝트 > APMA' 카테고리의 다른 글
기존 프로젝트 업그레이드 시키기 (0) | 2023.12.09 |
---|---|
CORS란? (0) | 2023.09.02 |