Как проверить FormData?
Я пробовал console.log
и цикл через него с помощью for in
.
здесь MDN Reference на 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-loop:
<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)
}