如何检查FormData?

IT技术 javascript form-data
2021-02-09 00:15:54

我已经尝试 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);
}

如何检查表单数据以查看已设置的键。

6个回答

更新方法:

截至 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);
chrome 和 firefox 的最新版本现在提供了一个迭代器: myFormData.entries()
2021-03-11 00:15:54
FormData在 IE/Edge 中迭代stackoverflow.com/questions/37938955 /...
2021-03-14 00:15:54
在撰写本文时,无法访问 FormData。我现在更新了答案以反映新的 API。感谢您的提醒!
2021-03-15 00:15:54
嗯,这将是一个好主意,我会将 FormData 包装在一个辅助方法中,然后传入对象字面量。然后保存以备日后查看。
2021-03-17 00:15:54
我认为注意到您可以使用以下方式获取现有表单的数据也很有用:var formData = new FormData(formElement)如果您正在使用JQuery,你可以因此这样做:var formData = new FormData($('#formElementID')[0])然后根据需要追加数据。
2021-04-09 00:15:54

几个简短的回答

[...fd] // shortest devtool solution
console.log(...fd) // shortest script solution
console.log([...fd]) // Think 2D array makes it more readable
console.table([...fd]) // could use console.table if you like that
console.log(Object.fromEntries(fd)) // Works if all fields are uniq
console.table(Object.fromEntries(fd)) // another representation in table form
new Response(fd).text().then(console.log) // To see the entire raw body

更长的答案

其他人建议记录每个entry of fd.entries(),但console.log也可以采用多个参数
console.log(foo, bar, ...)
要采用任意数量的参数,您可以使用该apply方法并将其调用如下:console.log.apply(console, array)
但是有一种新的 ES6 方法可以使用扩展运算符和迭代器来应用参数
console.log(...array)

知道这一点,并且事实上FormData和数组都在它的原型中有一个Symbol.iterator方法,它指定了默认的for...of循环,然后你就可以散布参数,...iterable而不必去调用formData.entries()方法(因为是默认功能)for (x of formData)如果你愿意,你可以这样做

var fd = new FormData()

fd.append('key1', 'value1')
fd.append('key2', 'value2')
fd.append('key2', 'value3')

// using it's default for...of specified by Symbol.iterator
// Same as calling `fd.entries()`
for (let [key, value] of fd) {
  console.log(`${key}: ${value}`)
}

// also using it's default for...of specified by Symbol.iterator    
console.log(...fd)

// Don't work in IE (use last pair if same key is used more)
console.log(Object.fromEntries(fd))

如果您想检查原始正文的外观,则可以使用Response 构造函数(fetch API 的一部分),这会将您的 formdata 转换为上传 formdata 时的实际外观

var fd = new FormData()

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

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

传播运算符!!出色且非常简单,将表单数据显示为伪 Json 格式。谢谢 - 对于新的回应,我只是得到 [[PromiseStatus]]:"pending"
2021-03-11 00:15:54
或者从网络控制台写 [...fd]
2021-03-16 00:15:54
好吧,括号只是一个数组,您正在创建一个新数组。您正在使用...from formdata展开条目以创建包含所有项目的新数组,然后控制台仅转储您编写的最后一行的结果
2021-03-25 00:15:54
地狱的钟声 - 你又做到了@Endless。使用括号调用什么方法?
2021-04-02 00:15:54
最佳答案在这里 - 应该删除所有的 gimpf 并只留下第二个代码片段 - 非常感谢
2021-04-08 00:15:54

我用的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()与更广泛的浏览器支持,但他们只带来了value,而不是重点。查看链接了解更多信息。

终于可以轻松查看 FormData 对象了!升级到 Chrome 50(昨天,2016 年 4 月 13 日发布)后,这对我有用。
2021-03-22 00:15:54
VAR一双抛出的错误我。in替换它似乎至少打印了一些东西,但它不是像 MDN 状态那样的键或值。
2021-03-31 00:15:54
ES6: for (const pair of formData.entries()) { console.log(pair[0], pair[1]); }
2021-04-01 00:15:54
for ... ofES6功能,它只能在某些浏览器中工作。根据 MDN排除任何版本的 IE
2021-04-05 00:15:54
大多数 IE 不支持 for of。仅在 IE 边缘支持
2021-04-10 00:15:54

ES6+解决方案:

查看表单数据的结构:

console.log([...formData])

查看每个键值对:

for (let [key, value] of formData.entries()) {
  console.log(`${key}: ${value}`);
}
你能定义一下formData到底是什么吗
2021-03-19 00:15:54
multipart/form-data 匹配您的<form enctype="multipart/form-data">部分。一般用于上传文件的时候。FormData 允许您在 JavaScript 中维护自己的有效负载对象——与 HTML <form> 组件分开。这允许您将其解耦并执行更高级的表单管理逻辑。
2021-03-31 00:15:54

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

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

不是:当我在 Angular 5(使用 TypeScript 2.4.2)上工作时,我像上面一样尝试过,它可以工作,除了静态检查错误,但也 for(var pair of formData.entries())不起作用。

在 Stackblitz 查看

好的。想给你10星。
2021-03-15 00:15:54
+ 与 IE 11 不兼容(value, key) => {..头痛 !
2021-03-16 00:15:54