Как проверить 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);
}
как я могу проверить данные формы, чтобы увидеть, какие ключи установлены.
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 применять аргументы с помощью распространение оператор и iteratorconsole.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) });
вот функция для записи записей объекта 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); };
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