Tang's
탕로그
Tang's
전체 방문자
오늘
어제
  • 분류 전체보기 (35)
    • FRONTEND (26)
      • JavaScript (6)
      • Algorithm (2)
      • CSS (2)
      • React (5)
      • Next.js (1)
      • 기타 (4)
      • 임시 (1)
      • 백만가지 ERROR (4)
      • 면접준비 (0)
      • project (1)
    • BACKEND (2)
      • Node.js (1)
      • MongoDB (1)
    • TODAY (7)
      • 생각 (1)
      • 회고 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 폴더 권한 확인
  • 신입 프론트엔드 개발자
  • partial prerendering
  • yarn create next-app
  • server action
  • jest react-query
  • Next.js 14
  • modal 제어
  • 폴더 권한 설정
  • 프론트엔드 개발자 회고
  • 회고
  • React
  • nextjs ci/cd
  • nextjs metadata
  • docker-compose ci/cd
  • jest
  • jest recoil
  • Nextjs docker
  • 신입 프론트엔드 개발자 회고
  • display:flex
  • linux 폴더 권한
  • 폴더 권한 변경
  • Turbopack
  • 프론트엔드 면접질문
  • jest nextjs typescript
  • 개발자 회고
  • jest 초기 세팅
  • ec2 권한 설정
  • props와 state 차이점
  • nginx-proxy-manager

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Tang's

탕로그

FRONTEND/JavaScript

[JS] FormData() 생성자에 데이터 추가하는 법

2022. 8. 31. 23:41

1. 사용 목적

FormData() 생성자 생성으로 form의 데이터들을 비동기처리를 위한 ajax에 넘겨주기 위함

 

// 생성
let formData = new FormData(form);

//id가 form인 form태그 존재시 -> new FormData(document.querySelector('#form')

 

기존 HTML에서 form 태그가 존재한다면 위처럼 매개변수로 넣어준다.

 

2. 데이터 추가

기본적으로 입력한 데이터는 '문자열'로 추가됨.

set() 과 append()를 사용해서 데이터를 추가한다.

//데이터 추가

let formData = new FormData()

formData.append('age', 18); // 같은 key값으로 데이터 추가 가능.
formData.append('age', 20);

formData.set('age', 21); // set()은 기존 같은 key값의 데이터를 덮어씀.

 

3. FormData() 의 메서드

//FormData() 메서드

let formData = new FormData();

formData.has() // Boolean 값 반환
formData.get() // 값이 여러개라면, 첫 번째 값 반환
formData.getAll() // 값여러개 배열 형태로 반환

formData.keys() // key 값들 반환
formData.values() // value 값들 반환
formData.entries() key, value 배열 형태로 반환

formData.values().next(); // 반복해서 다음 값 반환.

formData.set() // 추가
formData.append()

formData.delete() // 삭제

 

4. FormData()에 이미지 추가하는 법

//이미지 추가

//HTML
<input id="file_form" type="file" name="image_uploads" accept=".jpg,.jpeg,.png">

//JS
let formData = new FormData();

formData.append('img', document.querySelector('#file_form).files[0]);

type="file"인 <input> 태그로 받은 이미지를 formData()에 'img'라는 key로 저장한다.

input.files는 받은 파일에 대한 정보를 배열로 담고있음.

 

 

5. ajax()를 이용한 formData() 전송시

$.ajax()의 contentType, processData 속성의 값으로 false를 줘야 한다.

processData: false;

 - ajax가 multipart 방식으로 데이터를 보낼때 jQuery는 내부적으로 데이터를 query String 형태로 변환해서 보낸다.

따라서 파일전송에서 query String 형태변환을 막기위해 값으로 false를 준다.

 

contentType : false;

 - HTML <form>에서 enctype을 별도로 지정하지 않으면 default 전송방식은

'application/x-www.form-urlencoded'이다. (영문,숫자 전송에 유리한 방식)

 

따라서 'multipart/form-data'방식으로 데이터를 전송하기 위해서 값으로 false를 준다.

 

//HTML
<form id="form" method="post" enctype="multipart/form-data">
	<div>
    	<label for="image_uploads"> 이미지를 선택해주세요 </label>
        <input type="file" id="image_uploads" name="image_uploads" accept=".jpg,.jpeg,.png">
    </div>
	<div>
    	<button onclick="ajaxFunc()">Submit</button>
    </div>
</form>


//JS
function ajaxFunc() {
let formData = new FormData();
    formData.append('img', document.querySelector('#image_uploads').files[0]);
    
    $.ajax({
    	url: 주소,
        data: formData,
        type: 'POST',
        processData: false,
        contentType: false,
        
        success: function(response) {
        	...
        }
    })
}

'FRONTEND > JavaScript' 카테고리의 다른 글

[JS] Map()의 메서드 종류  (0) 2022.08.29
[JS] arr.forEach() 와 arr.map()의 차이점!  (0) 2022.08.27
[JS] 버블정렬 알고리즘 오름차순, 내림차순  (0) 2022.08.25
[JS] 문자열을 배열로 바꾸고 공백 제거하기 (+배열 공백제거)  (0) 2022.08.23
[JS] 요소.getBoundingClientRect() 메서드 속성  (0) 2022.08.21
    'FRONTEND/JavaScript' 카테고리의 다른 글
    • [JS] Map()의 메서드 종류
    • [JS] arr.forEach() 와 arr.map()의 차이점!
    • [JS] 버블정렬 알고리즘 오름차순, 내림차순
    • [JS] 문자열을 배열로 바꾸고 공백 제거하기 (+배열 공백제거)
    Tang's
    Tang's
    탕탕한 탕진의 기술 블로그!

    티스토리툴바