웹 페이지의 일부분만을 업데이트하기 위한 비동기 통신 기술.
전통적인 웹 페이지는 새로운 데이터가 필요할 때마다 전체 페이지를 다시 로드해야 함.
AJAX를 사용하면 페이지 전체를 새로고침하지 않고도 서버와 데이터를 주고받을 수 있음.
// 기본적인 AJAX 요청 예시
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.onload = function() {
if (xhr.status === 200) {
const data = JSON.parse(xhr.responseText);
console.log('데이터 수신 성공:', data);
}
};
xhr.send();
더 간단한 방식인 Fetch API:
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log('데이터 수신 성공:', data))
.catch(error => console.error('에러 발생:', error));
실제 활용 사례:
최신 웹 개발에서는 AJAX를 직접 사용하기보다는 axios나 fetch API와 같은 현대적인 도구들을 더 많이 사용함.
fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(data => {
console.log('성공:', data);
})
.catch(error => {
console.error('에러 발생:', error);
// 사용자에게 에러 메시지 표시
alert('데이터를 불러오는데 실패했습니다.');
});
fetch('https://api.example.com/submit', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
username: '홍길동',
age: 25
})
})
.then(response => response.json())
.then(data => console.log('성공:', data));
// GET 요청
axios.get('https://api.example.com/data')
.then(response => console.log(response.data))
.catch(error => console.error(error));
// POST 요청
axios.post('https://api.example.com/submit', {
username: '홍길동',
age: 25
})
.then(response => console.log(response.data));
const searchInput = document.querySelector('#search');
searchInput.addEventListener('input', function(e) {
const searchTerm = e.target.value;
// 입력이 너무 짧으면 요청하지 않음
if (searchTerm.length < 2) return;
fetch(`https://api.example.com/search?q=${searchTerm}`)
.then(response => response.json())
.then(results => {
// 검색 결과 표시
displayResults(results);
})
.catch(error => console.error('검색 중 에러:', error));
});
function displayResults(results) {
const resultsContainer = document.querySelector('#results');
resultsContainer.innerHTML = ''; // 기존 결과 삭제
results.forEach(result => {
const div = document.createElement('div');
div.textContent = result.title;
resultsContainer.appendChild(div);
});
}
const formData = new FormData();
const fileField = document.querySelector('input[type="file"]');
formData.append('file', fileField.files[0]);
fetch('https://api.example.com/upload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
console.log('업로드 성공:', data);
})
.catch(error => {
console.error('업로드 실패:', error);
});
이러한 AJAX 요청들은 보통 다음과 같은 상황에서 사용: