Как проверить FormData?



Я пробовал console.log и цикл через него с помощью for in.



здесь ссылка MDN на FormData.



обе попытки в этом скрипка.



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


как я могу проверить данные формы, чтобы увидеть, какие ключи установлены.

622   9  

9 ответов:

Обновление Способ:

по состоянию на март 2016 года, последние версии 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]); 
}

спасибо Призрак Эхо и rloth для указания на это!

Ответ:

после этиMozillaстатьи, похоже, что нет никакого способа получить данные из объекта FormData. Вы можете использовать их только для создания FormData для отправки через запрос AJAX.

Я также только что нашел этот вопрос, который утверждает то же самое: FormData.добавить("ключ", "значение") не работает.

один из способов обойти это было бы создать обычный словарь, а затем преобразовать его в виде 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.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() С более широкой поддержкой браузера, но они только поднимают значения, а не ключ. См. ссылку для получения дополнительной информации.

если вы хотите проверить, как будет выглядеть сырое тело, тогда вы можете использовать конструктор ответ (часть 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 применять аргументы с помощью распространение оператор и iterator
console.log(...array).

зная это, и тот факт, что FormData и оба массива имеет Symbol.iterator метод в его прототипе вы можете просто сделать это без необходимости перебирать его или вызывать .entries() чтобы получить удержание итератора

var fd = new FormData

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

console.log(...fd)

в некоторых случаях, использование :

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

это не очень умный код, но он работает...

надеюсь, что это поможет.

когда я работаю на Angular 5+ (с TypeScript 2.4.2), я попытался следующим образом, и он работает, кроме статической ошибки проверки, но и for(var pair of formData.entries()) не работает.

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

проверьте в Stackblitz

вот функция для записи записей объекта 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 doc on .entries()

MDN doc on .next() и .done

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


            },

       });
}

вы должны это понимать 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>

попробуйте это ::

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

Comments

    Ничего не найдено.