Spring/JavaScript+Jsp(HTMl)

[js] serialize(), serializeArray() 이용해 form값 한번에 가져오기

snow_hong 2023. 2. 9. 09:29

serialize(), serializeArray() 이용해 form값 한번에 가져올 수 있다.

form값을 이용할 때 유용한 함수이다.

 

serialize()
form 객체들을 표준 URL인코딩 표기법으로 텍스트 문자열 생성

- form(폼) 객체들을 한번에 받기 

- 표준 URL인코딩 표기법으로 텍스트 문자열 생성

- name속성(attribute) 가 무조건 있어야한다.

- 체크박스(checkbox)와 라디오(radio)은 체크 된 경우만 포함

- file의 첨부파일 데이터는 직렬화X

- 폼 객체들을 나열함

 

[ 예시 ] 

<form name="dataForm" id="dataForm">
  <input type="hidden" name="name" value="Hong">
  <input type="hidden" name="it" value="web">
  <input type="hidden" name="lang" value="java"> 
  <input type="hidden" name="age" value="2023">
</form>
<div name="resultDiv" id="resultDiv">
  
</div>


//javaScript + jQuery
var serialize = $('#dataForm').serialize();
// id가 dataForm인 form의 내부 값을 직렬화 처리한다.

$('#resultDiv').html(serialize);

==================
결과값 : name=Hong&it=web&lang=java&age=2023

 

serializeArray()
form 요소들(input, textarea, select)을 이름을 key로, 값을 value로 하는 배열로 인코딩

- form(폼) 객체들을 한번에 받기 

- name 와 value 형태로 담아서 인코딩

- JSON 문자열로 인코딩할 준비가 된 객체의 JavaScript 배열을 만듦

- name attribute의 값이 반드시 있어야함

- value 값이 없는 element는 value가 빈(empty)스트링의 형태로 할당

- type이 submit 인 경우는 value가 있어도 (serialized) 대상에 해당되지 않음

- name이 배열인 경우  ex. <input name='fruits[]'.../> ,'fruits[]' 자체를 string으로 인식

 

[ 예제 ]

 

[html]
<form name="dataForm" id="dataForm">
  <input type="hidden" name="name" value="Hong">
  <input type="hidden" name="it" value="web">
  <input type="hidden" name="lang" value="java"> 
  <input type="hidden" name="age" value="2023">
</form>

<div name="resultDiv" id="resultDiv">
  
</div>

[js]
var serializeArray = $('#dataForm').serializeArray();

$('#resultDiv').html(JSON.stringify(serializeArray));

 

[ form 데이터를 JSON으로 변환함수 예제 ]

// form data를 JSON으로 변환한다
// ex) getFormToObject($('#saveForm'));
// 두번째 인자로 문자열을 보낼 경우 해당 문자를 이름에서 제거한다
// (레이어 팝업을 사용하는 경우 getFormToObject($('#savePopForm'), '_pop')); 과 같은 형태로 사용);
var getFormToObject = function (form, removeString) {
    var param = {};
    var list = $(form).serializeArray();
    for (var i = 0; i < list.length; i++) {
        var obj = list[i];
        if (obj.value !== null) {

            var name;
            //두번째 인자로 문자열을 보낼 경우 해당 문자를 이름에서 제거
            if (removeString) {
                name = obj.name.replace(removeString, '');
            } else {
                name = obj.name;
            }
            // date의 경우 . 제거
            if (obj.name.toLowerCase().indexOf('date') > -1) {
                obj.value = obj.value.replace(/\./gi, '');
            }

            param[name] = obj.value;
        }
    }
    return param;
};

serializeArray()함수를 잘 사용하면 ajax를 사용할 때 편하게 사용할 수 있는 것 같다.

 

728x90