1차 공부/공부한 자료

221220 formdata

공대탈출 2022. 12. 20. 11:30

FormData란 ajax로 폼 전송을 가능하게 해주는 Form객체입니다.

보통은 ajax로 form을 전송할 일이 거의 없고 JSON구조로 데이터를 전송합니다.

 

하지만 이미지를 ajax로 업로드할 때 form전송을 필요로 합니다. 물론 base64, buffer, 2진data형식으로 서버로 전송해도됩니다.

 

 

<input type="file" />

보통 form을 제추랗면 action 속성에 의해 지정한 페이지로 이동하면서 데이터를 전송합니다.

ajax는 반대로 제출버튼을 누르면 기본 폼 동작은 e.preventDefault()로 멈추고 페이지 전환 없이 데이터를 전송합니다.

 

페이지 전환 없이 폼 데이터를 제출하고 싶을 때 바로 FormData객체를 사용합니다.

 

FormData객체는 window.FormData에 위치합니다.

//payload로 갈 formData
  const formData = new FormData();
  
//전달할 객체 생성
  formData.append('category', time);
  formData.append('title', foodName);
  formData.append('content', foodDesc);
  formData.append('thumbnail', imgFile);
  // 데이터 전달 명령 필요
  dispatch(__postFood(formData));

위와같이 FormData()를 새롭게 만들어주고 그 formdata에 키와 밸류값을 append해준 뒤, dispatch에 실어준 모습입니다.

 

FormData에는 has(), get(), getAll()메소드를 사용할 수 있습니다.

//payload로 갈 formData
  const formData = new FormData();
  
//전달할 객체 생성
  formData.append('category', time);
  formData.append('title', '자기소개');
  formData.append('title', '안녕하세요');
  formData.append('content', foodDesc);
  formData.append('thumbnail', imgFile);
  //데이터를 추가 할 때는 같은 key를 가진 값을 여러개 넣을 수 있습니다.
  //덮어쓰지않고 추가되며 값은 문자열로 자동변환됩니다.
  //숫자를 넣어도 문자열이되고,
  //배열을 넣어도 콤마로 구분된 문자열이됩니다.
  //!!!!!!!!!!객체를 넣으면 무시됩니다.!!!!!!!!!!!!!!
  
// 데이터 전달 명령 필요
  dispatch(__postFood(formData));
  
//데이터 확인
formData.has('category')	//true
formData.has('age')	//false

//데이터 한개만 반환
formData.get('title')	//'자기소개'
//get은 처음 저장한 값 하나만 불러옵니다.

//데이터 모두 반환
formData.getAll('title')	//['자기소개','안녕하세요']
//getAll은 해당 key에 매칭되는 value값을 모두 배열로 반환합니다.

  키, 밸류, 혹은 둘다 불러올 수 도 있습니다.

//payload로 갈 formData
  const formData = new FormData();
  
//전달할 객체 생성
  formData.append('category', time);
  formData.append('title', '자기소개');
  formData.append('title', '안녕하세요');
  formData.append('content', foodDesc);
  formData.append('thumbnail', imgFile);
  //데이터를 추가 할 때는 같은 key를 가진 값을 여러개 넣을 수 있습니다.
  //덮어쓰지않고 추가되며 값은 문자열로 자동변환됩니다.
  //숫자를 넣어도 문자열이되고,
  //배열을 넣어도 콤마로 구분된 문자열이됩니다.
  //!!!!!!!!!!객체를 넣으면 무시됩니다.!!!!!!!!!!!!!!

//formData의 키값 모두 가져오기
let keys = formData.keys();
keys.next();	//{done:false, value:'category'}
keys.next();	//{done:false, value:'title'}
keys.next();	//{done:false, value:'title'}
keys.next();	//{done:false, value:'content'}
keys.next();	//{done:false, value:'thumbnail'}
keys.next();	//{done:true, value:'undefined'}

//formData의 밸류값 모두 가져오기
let values = formData.values();
values.next();	//{done:false, value:'time'}
values.next();	//{done:false, value:'자기소개'}
values.next();	//{done:false, value:'안녕하세요'}
values.next();	//{done:false, value:'foodDesc'}
values.next();	//{done:false, value:'imgFile'}
values.next();	//{done:true, value:'undefined'}

//formData의 엔드리들 모두 가져오기
let entries = formData.entries();
entries.next()	//{done:false, value=['category', 'time']}
entries.next()	//{done:false, value=['title', '자기소개']}
entries.next()	//{done:false, value=['title', '안녕하세요']}
entries.next()	//{done:false, value=['content', 'foodDesc']}
entries.next()	//{done:false, value=['thumbnail', 'imgFile']}
entries.next()	//{done:true, value=undefined}

이렇게 가져온 값들을 for문을 사용하여 모두 쉽게 보여줄 수 있습니다.

 

 

//payload로 갈 formData
  const formData = new FormData();
  
  formData.append( 'test', ['hi','hyemin'] );
  formData.get('test'); // hi,hyemin

  formData.delete('test');

  formData.get('test'); // null값이 들어갑니다.
  formData.set('item','test2');
  formData.getAll('item); // ['test2']

append와 비슷한 set메소드는 같은 추가이지만 기존 동일한 key가 있으면 그 값을 덮어씌웁니다.

append는 추가하기지만 set은 덮어씌우기

 

 

 

 

 

 

 

 

 

 

[JavaScript]Form Data란?

FromData란 ajax로 폼 전송을 가능하게 해주는 FormData 객체입니다. 보통은 Ajax로 폼(form 태그) 전송을 할 일이 거의 없습니다. 주로 JSON 구조로 "KEY-VALUE" (키와 값) 구조로 데이터를 전송합니다. 하지만

2ham-s.tistory.com

 

'1차 공부 > 공부한 자료' 카테고리의 다른 글

221224 HTTP통신  (0) 2022.12.24
221221 태그정리2  (0) 2022.12.21
221219 태그 정리  (0) 2022.12.19
221217 Session Storage에 저장하고 가져오기  (0) 2022.12.17
221217 localstorage에 저장하고 가져오기  (0) 2022.12.17