1 분 소요

jQuery의 .serialize().serializeArray() 메소드를 활용하면 Ajax로 폼 데이터를 간편하게 전송할 수 있습니다. 비동기 폼 제출의 핵심을 정리합니다.


1. Ajax에서 Form 데이터를 전송하는 이유

기존 HTML 폼은 제출 시 전체 페이지가 새로고침됩니다. 하지만 jQuery Ajax를 사용하면 페이지 이동 없이 서버와 데이터를 주고받고, 결과만 일부 화면에 출력할 수 있습니다. 사용자 경험을 크게 향상시킬 수 있죠.


2. 직렬화란?

  • 직렬화(Serialization)는 HTML <form> 요소에 입력된 데이터를 하나의 문자열로 변환하는 과정입니다.
name=홍길동&email=test@example.com&message=안녕하세요

이 문자열은 서버에 전송 가능한 포맷이며, 쿼리 문자열(Query String) 형식입니다.


3. jQuery 직렬화 메소드

.serialize()

  • <form> 안의 모든 입력 값을 쿼리 문자열로 반환합니다.
  • 바로 Ajax의 data로 전달 가능.
const data = $("form").serialize();

.serializeArray()

  • 이름(name)과 값(value)을 객체 배열 형태로 반환합니다.
  • 유효성 검사, 가공 작업이 필요한 경우 유용.
const array = $("form").serializeArray();

예시 출력:

[
  { name: "name", value: "홍길동" },
  { name: "email", value: "test@example.com" }
]

4. 사용 예제

.serialize() 사용 예

$("form").on("submit", function (e) {
  e.preventDefault();
  const formData = $(this).serialize();
  console.log(formData); // key1=value1&key2=value2
});

.serializeArray() 사용 예

$("form").on("submit", function (e) {
  e.preventDefault();
  const formArray = $(this).serializeArray();
  console.log(formArray);
});

5. Ajax로 Form 데이터 전송하기

$("form").on("submit", function (e) {
  e.preventDefault();
  const formData = $(this).serialize();

  $.ajax({
    url: "/submit",       // 서버 요청 주소
    method: "POST",       // POST 방식 전송
    data: formData,
    success: function (res) {
      alert("서버 응답: " + res.message);
    },
    error: function (xhr, status, err) {
      console.error("요청 실패:", err);
    }
  });
});

6. 한글 데이터 전송 시 주의사항

한글은 전송 중 퍼센트 인코딩이 적용됩니다.

예:

message=안녕하세요` → `message=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94

서버에서 decodeURIComponent() 또는 해당 언어의 디코딩 함수를 사용해 처리해야 합니다.


질문 정리

.serialize().serializeArray()는 언제 각각 사용하나요?

→ 서버 전송용이면 .serialize(), JS에서 값 가공이 필요하면 .serializeArray()가 유리합니다.

모든 input 값이 자동으로 직렬화되나요?

<input>, <select>, <textarea> 등의 name 속성이 설정된 요소만 직렬화됩니다.

폼 유효성 검사와 Ajax 전송은 함께 사용할 수 있나요?

→ 가능합니다. submit 이벤트 내에서 JavaScript로 유효성 검사를 하고, 통과 시 Ajax 요청을 실행하세요.

파일 업로드도 .serialize()로 전송되나요?

→ 아닙니다. 파일 전송은 FormData 객체를 사용해야 합니다.


마무리 정리

  • .serialize() → URL 인코딩된 쿼리 문자열 반환
  • .serializeArray() → 배열로 변환하여 커스터마이징에 적합
  • Ajax와 함께 쓰면 페이지 새로고침 없이 빠르게 데이터를 전송 가능
  • 한글 인코딩유효성 검사를 고려하면 안정적인 폼 처리 가능

카테고리:

업데이트:

댓글남기기