JS Form 전송 및 처리 스크립트 예시


웹 개발 시 jQuery 이벤트 처리와 Fetch API를 조합하여 폼 데이터를 비동기(AJAX)로 전송하고 처리하는 방식은 매우 흔히 사용됩니다. 이번 포스팅에서는 jQuery를 활용해 폼 데이터를 추출한 후 FormData 객체와 Fetch API를 통해 서버로 전송하고 응답 결과를 처리하는 JavaScript 예제 코드를 정리합니다.

📌 목차

  • 1. 클릭 이벤트 및 FormData 생성 예제
  • 2. Fetch API 기반 비동기 전송 함수 구현
  • 3. 주요 구현 특징 및 주의사항

1. 클릭 이벤트 및 FormData 생성 예제

버튼 클릭 이벤트가 발생했을 때 폼 내의 선택 요소(Select, Input) 값을 수집하여 FormData 객체에 담아주는 처리 스크립트입니다.

// 버튼 클릭 이벤트 리스너 등록
$(document).on('click', '#fetchbtn', (e) => {
    var year = $('#year :selected').val();
    var term = $('#term :selected').val();
    var searchText = $('#search').val();
    var id = $('#originLectureId').val();
    var mapping = $('#mapping').val();
    var section = $('#originSection').val();
    var category = $('#category').val();

    // FormData 객체 생성 및 데이터 파라미터 추가
    var formData = new FormData();
    formData.append('id', id);
    formData.append('year', year);
    formData.append('term', term);
    formData.append('mapping', mapping);
    formData.append('category', category);
    formData.append('section', section);
    formData.append('searchText', searchText);
    formData.append('fetchbtn', true);

    // 비동기 전송 함수 호출
    fetchCallHtml(formData, './contentPop/manualMappingPop.php', 'majorSearch');
});

2. Fetch API 기반 비동기 전송 함수 구현

POST 메서드를 통해 서버로 FormData를 전송하고, JSON 응답 결과를 전달받아 처리하는 비동기 통신 함수 예제입니다.

// 비동기 통신 처리 함수
function fetchCall(formData, url) {
    fetch(url, {
        method: 'POST',
        body: formData
    })
    .then(response => response.text())
    .catch(error => console.error('Error:', error))
    .then(string => {
        let stringData = JSON.parse(string);
        
        // 실패 처리
        if (stringData.status == 'fail') {
            alert(stringData.msg);
            return false;
        }
        
        // 성공 처리
        if (stringData.status == 'success') {
            if (stringData.type == 'manualMapping') {
                alert('완료됐습니다.');
                popup.close();
            }
            if (stringData.type == 'divisionMapping') {
                alert(stringData.msg);
            }
            console.log(url);
            location.reload();
            return false;
        }
    });
}

3. 주요 구현 특징 및 주의사항

위 스크립트 구조를 실무에서 활용할 때 유의해야 할 핵심 사항은 다음과 같습니다.

  • FormData 사용: FormData 객체를 사용할 경우 fetch 요청 시 별도의 Content-Type 헤더를 지정하지 않아도 브라우저가 multipart/form-data 경계값을 자동으로 설정합니다.
  • 응답 파싱: 서버 응답을 response.text()로 먼저 수신한 뒤 JSON.parse()를 거쳐 검증하므로, 서버 반환값이 올바른 JSON 포맷인지 확인하는 과정이 필요합니다. (response.json() 사용 권장)
  • 체이닝 구조: .catch() 블록이 중간에 위치하면 오류 발생 후에도 다음 .then() 블록이 실행될 수 있으므로 예외 처리는 체인 맨 끝으로 배치하는 것이 안전합니다.