Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 jQuery serializeArray()로 전송된 POST 값 가져오는 방법

jQuery의 serializeArray() 메서드로 전송한 폼 데이터를 PHP에서 POST 값으로 받아 처리하는 방법을 알아보겠습니다.

serializeArray() 메서드는 .serialize() 메서드와 마찬가지로 모든 폼(form)과 폼 요소를 직렬화하지만, 결과를 URL 인코딩된 문자열 대신 JSON 데이터 구조로 반환한다는 점이 다릅니다. 덕분에 객체 형태의 데이터를 그대로 $.post()$.ajax() 같은 AJAX 요청에 활용할 수 있습니다.

1단계: 서버 측 PHP 파일 준비하기

먼저 클라이언트에서 전송된 데이터를 받아 처리할 PHP 파일(serialize.php)을 다음과 같이 작성합니다.

<?php
if( $_REQUEST["name"] ) {

   $name = $_REQUEST['name'];
   echo "Welcome ". $name;
   $age = $_REQUEST['age'];
   echo "<br />Your age : ". $age;
   $sex = $_REQUEST['sex'];
   echo "<br />Your gender : ". $sex;
}
?>

위 코드는 $_REQUEST 슈퍼글로벌 변수를 통해 name, age, sex 세 가지 값을 읽어 순서대로 출력하는 간단한 예제입니다. 참고로 실무 환경에서는 보안을 위해 $_POST를 직접 사용하고, filter_input() 등으로 입력값을 검증한 뒤 처리하는 것이 권장됩니다.

2단계: serializeArray()를 활용한 클라이언트 예제

다음은 serializeArray() 메서드의 실제 사용 예를 보여주는 완전한 HTML 코드입니다.

<html>

   <head>
      <title>The jQuery Example</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
      
      <script>
         $(document).ready(function() {
           
            $("#driver").click(function(event){
               
               $.post(
                  "/jquery/serialize.php",
                  $("#testform").serializeArray(),
                  function(data) {
                     $('#stage1').html(data);
                  }
               );
                   
               var fields = $("#testform").serializeArray();
               $("#stage2").empty();
                   
               jQuery.each(fields, function(i, field){
                  $("#stage2").append(field.value + " ");
               });
                   
            });
               
         });
    </script>
   </head>
   
   <body>
   
      <p>Click on the button to load result.html file:</p>
      
      <div id = "stage1" style = "background-color:maroon;color:white;">
         STAGE - 1
      </div>
      
      <br />
      
      <div id = "stage2" style = "background-color:maroon;color:white;">
         STAGE - 2
      </div>
      
      <form id = "testform">
      
         <table>
           
            <tr>
               <td><p>Name:</p></td>
               <td><input type = "text" name = "name" size = "40" /></td>
            </tr>
              
            <tr>
               <td><p>Age:</p></td>
               <td><input type = "text" name = "age" size = "40" /></td>
            </tr>
              
            <tr>
               <td><p>Sex:</p></td>
               <td> <select name = "sex">
                  <option value = "Male" selected>Male</option>
                    <option value = "Female" selected>Female</option>
               </select></td>
            </tr>
              
            <tr>
               <td colspan = "2">
                    <input type = "button" id = "driver" value = "Load Data" />
               </td>
            </tr>  
              
         </table>
          
      </form>
      
   </body>
   
</html>

동작 원리 살펴보기

이 예제는 두 개의 영역(STAGE 1, STAGE 2)에 결과를 표시하는 방식으로 동작합니다.

STAGE 1 — 서버 응답 출력: "Load Data" 버튼을 클릭하면 $("#driver").click() 이벤트 핸들러가 실행되고, $.post()serialize.php로 비동기 POST 요청을 보냅니다. 이때 두 번째 인자로 $("#testform").serializeArray()를 전달하기 때문에 폼의 모든 필드(name, age, sex)가 JSON 배열 형태로 함께 전송되며, 서버가 돌려준 응답은 #stage1 영역에 삽입됩니다.

STAGE 2 — 직렬화된 데이터 확인: 동시에 jQuery.each() 루프가 직렬화된 배열의 각 항목을 순회하면서 필드 값(value)만 추출해 #stage2 영역에 나란히 출력합니다. 즉, 서버 응답을 기다리지 않고도 클라이언트 측에서 어떤 데이터가 전송되는지 즉시 확인할 수 있습니다.

이처럼 serializeArray()를 사용하면 복잡한 폼도 단 한 번의 호출로 JSON 구조의 데이터로 변환할 수 있어, AJAX 기반 폼 전송 로직을 깔끔하고 유연하게 구현할 수 있습니다.