๋ชจ๋ฌ์์ ๋น๋๊ธฐ๊ฐ ์๋ ๋ฐฉ์์ผ๋ก ํผ์ ์ ์ถ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ์๋ก๊ณ ์นจ์ด ์ผ์ด๋๊ฒ ๋์ด ํผ ์ ์ถ์ ์ฒ๋ฆฌํ ๋ ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ์ฌ์ฉ์ ์๊ฒ ์ง์ ์ ์ผ๋ก ์๋ ค์ฃผ๊ธฐ ์ด๋ ค์ ๋ค, ๊ทธ๋์ ๋น๋๊ธฐ๋ก ํผ ์ ์ถ๊ณ ๋์์ ๋ง์ฝ ์๋ฌ๊ฐ ์์ผ๋ฉด ๋์ ์ผ๋ก ์๋ฌ๋ฅผ ํ์ ํ ์ ์๊ฒ ์์ ํ๋๋ฐฉ๋ฒ์ ๋ถ์ํด๋ณด์.
๋ชจ๋ฌ ๋ด ํผ ์ ์ถ ์ฒ๋ฆฌ
๋ชจ๋ฌ ๋ด์์ ๋น๋๊ธฐ ํผ ์ ์ถ์ ๊ตฌํํ ๋์ ์ฃผ์ ์ ์, ํผ ์ ์ถ ํ ๋ฐ์ํ ์ ์๋ ์๋ฌ๋ฅผ ๋ชจ๋ฌ ๋ด์์ ์ฒ๋ฆฌํ๊ณ ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ํผ์ ์ ์ถํ ๊ฐ์ ์ปจํ ์คํธ ๋ด์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด, ๋ง์ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ AJAX(Ajax, Asynchronous JavaScript and XML)๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์ธํฐ๋์ ์ ๋ ๋ถ๋๋ฝ๊ฒ ๋ง๋ญ๋๋ค.
document.addEventListener('DOMContentLoaded', function() {
const smsCreateForm = document.getElementById('smsCreateForm');
smsCreateForm.addEventListener('submit', function(event) {
event.preventDefault(); // ๊ธฐ๋ณธ ์ ์ถ ์ด๋ฒคํธ ๋ฐฉ์ง
const formData = new FormData(smsCreateForm);
// AJAX ์์ฒญ ์ค์
fetch(smsCreateForm.action, {
method: 'POST',
body: formData
})
.then(response => response.json()) // ์๋ต์ JSON ํ์์ผ๋ก ๋ณํ
.then(data => {
if (data.success) {
// ์ฑ๊ณต ์ฒ๋ฆฌ ๋ก์ง
window.location.href = '/member/sms/list'; // ์ฑ๊ณต ํ ํ์ด์ง ์ด๋
} else {
// ์๋ฌ ๋ฉ์์ง ์ฒ๋ฆฌ
const errorContainer = document.getElementById('errorContainer');
errorContainer.innerHTML = ''; // ์ด์ ์๋ฌ ๋ฉ์์ง ์ด๊ธฐํ
data.errors.forEach(error => {
const errorElement = document.createElement('div');
errorElement.classList.add('alert', 'alert-danger');
errorElement.innerText = error;
errorContainer.appendChild(errorElement);
});
}
})
.catch(error => {
console.error('Failed to submit form:', error);
});
});
});
๊ธฐ์กด ์ฝ๋ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ ํด๋น ์ฝ๋๋ฅผ ๋ถ์ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋น๋๊ธฐ ํผ ์ ์ถ์ ๊ตฌํ
1. DOMContentLoaded ์ด๋ฒคํธ ๋ฆฌ์ค๋
์น ํ์ด์ง๊ฐ ์์ ํ ๋ก๋๋๊ณ ์ด๊ธฐํ๋๋ฉด, JavaScript ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค. DOMContentLoaded
์ด๋ฒคํธ๋ HTML ๋ฌธ์์ ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋ ํ์ ๋ฐ์ํ์ง๋ง, ์ด๋ฏธ์ง๋ ์คํ์ผ์ํธ ๊ฐ์ ๋ค๋ฅธ ์์์ ๋ก๋๋์ง ์์๋ ๋ฐ์ํฉ๋๋ค.
document.addEventListener('DOMContentLoaded', function() {
...
});
2. ํผ ์์ ์ ํ ๋ฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ค์
๋ฌธ์์์ ํน์ ํผ์ ์ ํํ๊ณ , ์ด ํผ์ submit
์ด๋ฒคํธ์ ๋ํด ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด ๋ฆฌ์ค๋๋ ํผ์ด ์ ์ถ๋ ๋ ์คํ๋ฉ๋๋ค.
const smsCreateForm = document.getElementById('smsCreateForm');
smsCreateForm.addEventListener('submit', function(event) {
...
});
3. ์ด๋ฒคํธ ๊ธฐ๋ณธ ๋์ ๋ฐฉ์ง
event.preventDefault()
๋ฉ์๋๋ ํผ์ ๊ธฐ๋ณธ ์ ์ถ ๋์์ ์ค๋จ์ํต๋๋ค. ์ด๋ ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด JavaScript๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
event.preventDefault();
4. FormData ๊ฐ์ฒด ์์ฑ
FormData
๊ฐ์ฒด๋ ํผ ์์ ๋ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ทจํฉํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด ๊ฐ์ฒด๋ fetch
ํธ์ถ์ body
๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค.
const formData = new FormData(smsCreateForm);
5. fetch๋ฅผ ์ด์ฉํ AJAX ์์ฒญ
fetch
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ก ๋น๋๊ธฐ ์์ฒญ์ ๋ณด๋
๋๋ค. ์ด ํจ์๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ฉฐ, ์๋ต ์ฒ๋ฆฌ๋ .then()
๋ฉ์๋๋ฅผ ํตํด ์ฐ๊ฒฐ๋ฉ๋๋ค.
fetch(smsCreateForm.action, {
method: 'POST',
body: formData
})
6. ์๋ต ์ฒ๋ฆฌ ๋ฐ UI ์
๋ฐ์ดํธ
์๋ฒ์ ์๋ต์ ๋ฐ์ ์ฑ๊ณต ์ฌ๋ถ์ ๋ฐ๋ผ ์ ์ ํ UI ์
๋ฐ์ดํธ๋ฅผ ์ํํฉ๋๋ค. ์ฑ๊ณต ์ ํ์ด์ง๋ฅผ ๋ฆฌ๋ค์ด๋ ํธํ๊ณ , ์คํจ ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค.
.then(response => response.json())
.then(data => {
if (data.success) {
window.location.href = '/member/sms/list';
} else {
const errorContainer = document.getElementById('errorContainer');
errorContainer.innerHTML = ''; // ์๋ฌ ์ปจํ
์ด๋ ์ด๊ธฐํ
data.errors.forEach(error => {
const errorElement = document.createElement('div');
errorElement.classList.add('alert', 'alert-danger');
errorElement.innerText = error;
errorContainer.appendChild(errorElement);
});
}
})
7. ์๋ฌ ์ฒ๋ฆฌ
๋คํธ์ํฌ ์ค๋ฅ๋ ์๋ฒ ์ค๋ฅ์ ๋์ํ์ฌ ์ฝ์์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
.catch(error => {
console.error('Failed to submit form:', error);
});
์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์ํค๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ๊ณผ ์ธํฐ๋ํฐ๋ธ์ฑ์ ๋์ ๋๋ค. ํผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํจ์ผ๋ก์จ, ์ฌ์ฉ์๋ ๋ฐ์ดํฐ๊ฐ ์๋ฒ๋ก ์ ์ก๋๋ ๋์์๋ ์ธํฐํ์ด์ค๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.