web-dev-qa-db-fra.com

Comment inspecter FormData?

J'ai essayé console.log et je l'ai parcouru avec for in

Voici le Référence MDN sur FormData. 

Les deux tentatives sont dans ce violon .

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);
}

Comment puis-je inspecter les données de formulaire pour voir quelles clés ont été définies?.

137
user1637281

Méthode mise à jour:

Depuis mars 2016, les versions récentes de Chrome et Firefox prennent désormais en charge l'utilisation de FormData.entries() pour inspecter FormData. La source .

// 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]); 
}

Merci à Ghost Echo et rloth pour le signaler!

Ancienne réponse:

Après avoir examiné ceux-ciMozillaarticles , il semble qu'il n'existe aucun moyen d'extraire des données d'un objet FormData. Vous ne pouvez les utiliser que pour construire FormData à envoyer via une demande AJAX. 

Je viens également de trouver cette question qui dit la même chose: FormData.append ("clé", "valeur") ne fonctionne pas .

Une solution consiste à créer un dictionnaire standard, puis à le convertir en 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]);
}

Si vous souhaitez déboguer un objet FormData brut, vous pouvez également l'envoyer afin de l'examiner dans la console de requête réseau:

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

J'utilise la méthode formData.entries(). Je ne suis pas sûr de la compatibilité de tous les navigateurs, mais cela fonctionne bien sous Firefox.

Extrait de 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]); 
}

Il existe également formData.get() et formData.getAll() avec une prise en charge de navigateur plus large, mais ils ne font que mettre en place les valeurs et non la clé. Voir le lien pour plus d'informations.

32
Ghost Echo

Dans certains cas, l'utilisation de:

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

est impossible.

J'ai utilisé ce code en remplacement:

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);

Ce n'est pas un code très intelligent, mais ça marche ...

J'espère que c'est de l'aide.

8
Luc

Lorsque je travaille sur Angular 5+ (avec TypeScript 2.4.2), j’ai essayé comme suit et cela fonctionne sauf une erreur de vérification statique, mais for(var pair of formData.entries()) ne fonctionne pas non plus. 

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

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

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

Contrôle à Stackblitz

3
Gurkan Yesilyurt

Voici une fonction pour consigner les entrées d’un objet FormData dans la console en tant qu’objet.

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);
};

Doc MDN on .entries()

Doc MDN sur .next() et .done

2
jtheletter

Solutions ES6 +:

Pour voir la structure des données de formulaire:

console.log([...formData])

Pour voir chaque paire clé-valeur:

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

Vous devez comprendre que FormData::entries() renvoie une instance de Iterator.

Prenons cet exemple:

<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>

et cette boucle JS:

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


            },

       });
}
2
sparsh turkane

Essayez cette fonction:

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

Vous avez déjà répondu, mais si vous souhaitez récupérer facilement des valeurs à partir d'un formulaire soumis, vous pouvez utiliser l'opérateur de propagation associé à la création d'une nouvelle carte itérable pour obtenir une structure de Nice.

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

1
ngr

dans TypeScript de angular 6, ce code fonctionne pour moi.

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

ou pour toutes les valeurs:

console.log(formData.getAll('name')); // return all values
0
A.R.F

Dans angular 7, j'ai eu des entrées sur console en utilisant la ligne de code ci-dessous.

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

Essaye ça ::

let formdata = new formData()
formdata.append('name', 'Alex Johnson')
for(let i of formdata){
    console.log(i)
}
0
Manioz