FormData를 검사하는 방법?


221

console.log나는를 사용하여 그것을 시도 하고 반복했다 for in.

여기 에 FormData에 대한 MDN 참조 가 있습니다.

두 시도 모두이 바이올린에 있습니다.

var fd = new FormData(),
    key;

// poulate with dummy data
fd.append("key1", "alskdjflasj");
fd.append("key2", "alskdjflasj");

// does not do anything useful
console.log(fd);

// does not do anything useful   
for(key in fd) {
    console.log(key);
}

어떤 키가 설정되어 있는지 양식 데이터를 검사하는 방법


파이어 폭스 전용 기능 아닌가요?
Shiplu Mokaddim 2016 년


1
key of fd대신에 하고 싶습니다 key in fd. 이것이 기술적으로 아직 왜인지는 모르겠지만 작동합니다. 여기에 설명서가 있습니다 .
cilphex

따라서 자바 스크립트에 코드를 추가하지 않고 양식 데이터를 표시하는 크롬 또는 파이어 폭스 플러그인이 있습니까?
natel

답변:


298

업데이트 된 방법 :

2016 년 3 월 현재 최신 버전의 Chrome 및 Firefox는 이제 FormData.entries()FormData 검사를 지원 합니다. 소스 .

// Create a test FormData object
var formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');

// Display the key/value pairs
for (var pair of formData.entries()) {
    console.log(pair[0]+ ', ' + pair[1]); 
}

이것을 지적 해 주신 Ghost Echorloth 에게 감사드립니다 !

기존 답변 :

Mozilla 기사를 살펴본 후 FormData 객체에서 데이터를 가져올 수있는 방법이없는 것 같습니다. AJAX 요청을 통해 전송할 FormData를 빌드하는 데만 사용할 수 있습니다.

나는 또한 같은 질문을하는이 질문을 발견했다 : FormData.append ( "key", "value") is not working .

이 문제를 해결하는 한 가지 방법은 일반 사전을 작성한 다음 FormData로 변환하는 것입니다.

var myFormData = {
    key1: 300,
    key2: 'hello world'
};

var fd = new FormData();
for (var key in myFormData) {
    console.log(key, myFormData[key]);
    fd.append(key, myFormData[key]);
}

일반 FormData 오브젝트를 디버그하려는 경우 네트워크 요청 콘솔에서 검사하기 위해 전송할 수도 있습니다.

var xhr = new XMLHttpRequest;
xhr.open('POST', '/', true);
xhr.send(fd);

글쎄, 그것은 좋은 생각 일 것입니다. 나는 FormData를 도우미 메소드로 감싸고 객체 리터럴을 전달할 것입니다. 그런 다음 나중에 보려는 경우에 대비하여 저장하십시오.

2
크롬과 파이어 폭스의 최신 버전은 이제 반복자를 제공합니다 :myFormData.entries()
rloth

1
작성 당시에는 FormData에 액세스 할 수있는 방법이 없었습니다. 이제 새 API를 반영하도록 답변을 업데이트했습니다. rloth를 해주셔서 감사합니다!
Ryan Endacott

2
또한 다음을 사용하여 기존 양식의 데이터를 가져올 수 있다는 점에 유의하는 것이 좋습니다 var formData = new FormData(formElement). JQuery를 사용하는 경우 다음을 수행 할 수 있습니다 var formData = new FormData($('#formElementID')[0]).. 그런 다음 필요에 따라 데이터를 추가하십시오.
Peter Valadez

반복의 경우 FormData: IE / 에지에 stackoverflow.com/questions/37938955/...을
cs_pupil

79

짧은 답변

console.log(...fd)

더 긴 답변

raw body가 어떻게 보이는지 검사하려면 Response 생성자 (fetch API의 일부)를 사용할 수 있습니다

var fd = new FormData

fd.append("key1", "value1")
fd.append("key2", "value2")

new Response(fd).text().then(console.log)

일부 항목은 각 항목 항목을 기록하도록 제안하지만 console.log여러 인수
console.log(foo, bar)
를 사용할 수도 있습니다. 여러 인수 를 사용하려면 apply메소드를 사용하여 다음 과 같이 호출 할 수 있습니다 console.log.apply(console, array).
그러나 스프레드 연산자 와 반복자를 사용 하여 인수를 적용하는 새로운 ES6 방법이 있습니다
console.log(...array).

이를 아는, 그리고 FormData 두 배열의가있다는 사실 Symbol.iterator그 위에 루프를 가진, 또는 전화없이 그냥 간단하게이 작업을 수행 할 수있는 그것의 프로토 타입 방법 .entries()반복자의 보류를 얻을 수를

var fd = new FormData

fd.append("key1", "value1")
fd.append("key2", "value2")

console.log(...fd)


2
스프레드 연산자 !! 훌륭하고 간단하며 formdata를 psuedo Json 형식으로 표시합니다. 감사합니다-새 답변의 경우 [[PromiseStatus]] : "pending"
platinums

5
또는 웹 콘솔에서 다음과 같이 작성하십시오[...fd]
Endless

지옥 종소리-당신은 다시 @Endless했다. 대괄호를 사용하여 어떤 방법을 호출합니까?
플래티넘

괄호는 배열 일 뿐이며 새로 작성하는 것입니다. ...formdata 에서 항목을 분산하여 모든 항목으로 새 배열을 만든 다음 콘솔은 마지막으로 작성한 줄의 결과를 덤프합니다.
Endless

1
여기에 가장 좋은 대답은 - 모든 gumpf를 제거하고 단지 2 코드 떠나야한다 - 많은 감사
danday74

39

나는 formData.entries()방법을 사용한다 . 모든 브라우저 지원에 대해 잘 모르겠지만 Firefox에서는 제대로 작동합니다.

https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries 에서 가져옴

// Create a test FormData object
var formData = new FormData();
formData.append('key1','value1');
formData.append('key2','value2');

// Display the key/value pairs
for (var pair of formData.entries())
{
 console.log(pair[0]+ ', '+ pair[1]); 
}

이 또한 formData.get()formData.getAll()넓은 브라우저를 지원하지만, 단지 값이 아닌 키를 가지고. 자세한 내용은 링크를 참조하십시오.


3
마침내 FormData 객체를 쉽게 볼 수 있습니다! 이것은 Chrome 50으로 업그레이드 한 후 나에게 도움이되었습니다 (2016 년 4 월 13 일 어제 출시되었습니다).
jbb

2
var 쌍 던져 오류가 발생했습니다. 로 교체 그러나, 적어도 뭔가를 인쇄 할 것 MDN 상태 등의 아닌 키 또는 값입니다.
Johnny Welker

1
ES6 :for (const pair of formData.entries()) { console.log(pair[0], pair[1]); }
2540625

...의를위한 이다 ES6기능과는 특정 브라우저에서 작동합니다. MDN에 따른
Zanshin13

of of는 대부분의 IE에서 지원되지 않습니다. IE Edge에서만 지원
mingca

11

어떤 경우에는 다음을 사용합니다.

for(var pair of formData.entries(){... 

불가능하다.

이 코드를 대신 사용했습니다.

var outputLog = {}, iterator = myFormData.entries(), end = false;
while(end == false) {
   var item = iterator.next();
   if(item.value!=undefined) {
       outputLog[item.value[0]] = item.value[1];
   } else if(item.done==true) {
       end = true;
   }
    }
console.log(outputLog);

매우 똑똑한 코드는 아니지만 작동합니다 ...

도움이 되길 바랍니다.


1
if 문을 뒤집어 done먼저 확인합니다 . done신뢰할 수있는 플래그입니다. 만약 done지정된 다르거 나 있지 않은 경우, value유효한 상품 (이 값을 가지고있다하더라도 undefined). 되면 done존재하고 true, 시퀀스의 끝에 도달하고, value심지어 정의 될 필요가 없다. 경우 value경우에 정의되어 done있다 true, 다음 value반복자의 반환 값으로 해석됩니다. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Triynko

10

Angular 5+ (TypeScript 2.4.2 사용)에서 작업 할 때 다음과 같이 시도했지만 정적 검사 오류를 제외하고 작동하지만 for(var pair of formData.entries())작동하지 않습니다.

formData.forEach((value,key) => {
      console.log(key+" "+value)
});

Stackblitz에서 확인


+ IE 11과 호환되지 않습니다 (value, key) => {... 두통 !
Delphine

1
좋은. 당신에게 10 스타를주고 싶습니다.
압둘라 누룸

10

쉬운 방법

각도 8 에서이 코드를 사용했습니다.

var formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');

 formData.forEach((value,key) => {
    console.log(key+value)
     });

9

ES6 + 솔루션 :

양식 데이터의 구조를 보려면

console.log([...formData])

각 키-값 쌍을 보려면

for (let [key, value] of formData.entries()) {
  console.log(key, ':', value);
}

2

다음은 FormData 객체의 항목을 콘솔에 객체로 기록하는 함수입니다.

export const logFormData = (formData) => {
    const entries = formData.entries();
    const result = {};
    let next;
    let pair;
    while ((next = entries.next()) && next.done === false) {
        pair = next.value;
        result[pair[0]] = pair[1];
    }
    console.log(result);
};

MDN 문서 .entries()

MDN 문서 .next().done


2
  function abc(){ 
    var form = $('#form_name')[0]; 
        var formData = new FormData(form);
        for (var [key, value] of formData.entries()) { 
            console.log(key, value);
        }
        $.ajax({
            type: "POST",
            url: " ",
            data:  formData,
            contentType: false,
            cache: false,
            processData:false,
            beforeSend: function() {

            },
            success: function(data) {


            },

       });
}

+ IE 11과 호환되지 않습니다 for...of... 두통 !
Delphine

2

FormData::entries()의 인스턴스 를 반환 한다는 것을 이해해야합니다 Iterator.

이 예제 양식을 보자.

<form name="test" id="form-id">
    <label for="name">Name</label>
    <input name="name" id="name" type="text">
    <label for="pass">Password</label>
    <input name="pass" id="pass" type="text">
</form>

그리고이 JS 루프 :

<script>
    var it = new FormData( document.getElementById('form-id') ).entries();
    var current = {};
    while ( ! current.done ) {
        current = it.next();
        console.info( current )
    }
</script>

2

각도 7에서는 아래 코드 줄을 사용하여 콘솔에 항목이 있습니다.

formData.forEach(entries => console.log(entries));

2

이미 답변했지만 제출 된 양식에서 쉬운 방법으로 값을 검색하려는 경우 스프레드 구조를 사용하여 새 맵 반복 작성을 작성하여 멋진 구조를 얻을 수 있습니다.

new Map([...new FormData(form)])


비록-이것은 inp_nam [some_mult] []에 문제가 있습니다
2bit

2

에서 typeScriptangular 6이 코드는 나를 위해 노력하고 있습니다.

var formData = new FormData();
formData.append('name', 'value1');
formData.append('name', 'value2');
console.log(formData.get('name')); // this is return first element value.

또는 모든 값에 대해 :

console.log(formData.getAll('name')); // return all values

1

이 기능을 사용해보십시오 :

function formDataToObject(formData) {
  return Array.from(formData.entries()).reduce((old, pair) => ({
    ...old,
    [pair[0]]: pair[1],
  }), {});
}

2
이 코드 스 니펫이 해결책이 될 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 귀하의 코드 제안 이유를 모를 수도 있습니다.
Johan

0

MDN이 제안 은 다음 양식을 :

let formData = new FormData();
formData.append('name', 'Alex Johnson')
for(let keyValuePair of formData.entries()){
    console.log(keyValuePair); //has form ['name','Alex Johnson']
}

대안 적으로

for (let [key, value] of formData.entries()) {
 console.log(key, ':', value);
}

브라우저 또는 환경이 최신 JavaScript 및 FormData API를 지원하지 않는 경우 ES + Polyfills 추가를 고려하십시오 .

이게 도움이 되길 바란다.


이 코드를 실행하기 전에 테스트 했습니까? formData()먼저 대문자를 사용해야합니다. 또한 for ... of loop3 행의 암시 적으로 FormData.entries를 호출 new FormData()[Symbol.iterator]하면 콘솔에서 실행 하여 볼 수 있습니다 . 마지막으로, FormData.entries를 지원하지 않는 Edge와 같은 브라우저에서이를 실행하면 FormData 객체에서 사용 가능한 메소드 이름 인쇄와 같은 예기치 않은 결과가 나타납니다.>>> var data = new FormData(); data.append("Foo", "Bar"); for(let x in data){console.log(x)}; <<< 'append'
Lovethenakedgun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.