如何检查FormData?

182 javascript form-data

我已经尝试过 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);
}
Run Code Online (Sandbox Code Playgroud)

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

Rya*_*ott 253

更新方法:

截至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]); 
}
Run Code Online (Sandbox Code Playgroud)

感谢Ghost Echorloth指出这一点!

旧答案:

在查看这些 Mozilla 文章之后,看起来无法从FormData对象中获取数据.您只能使用它们来构建FormData以通过AJAX请求发送.

我也发现这个问题说明了同样的事情:FormData.append("key","value")不起作用.

解决这个问题的一种方法是建立一个常规字典,然后将其转换为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]);
}
Run Code Online (Sandbox Code Playgroud)

如果要调试普通FormData对象,还可以发送它以便在网络请求控制台中检查它:

var xhr = new XMLHttpRequest;
xhr.open('POST', '/', true);
xhr.send(fd);
Run Code Online (Sandbox Code Playgroud)

  • 尽管如此,这仍然是最糟糕的浏览器 API 之一。他们为什么不添加一个方法来返回以获取键/值对的对象。 (3认同)
  • 最近版本的chrome和firefox现在提供了一个迭代器:`myFormData.entries()` (2认同)
  • 我认为你可以使用以下方法获取现有表单的数据:`var formData = new FormData(formElement)`.如果您正在使用JQuery,那么您可以这样做:`var formData = new FormData($('#formElementID')[0])`.然后根据需要附加数据. (2认同)

End*_*ess 48

简短的回答

console.log(...fd)
Run Code Online (Sandbox Code Playgroud)

更长的答案

如果您想检查原始主体的外观,那么您可以使用Response构造函数(fetch API的一部分)

var fd = new FormData

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

new Response(fd).text().then(console.log)
Run Code Online (Sandbox Code Playgroud)

一些愿望建议记录条目的每个条目,但console.log也可以采用多个参数
console.log(foo, bar)
要获取任意数量的参数,您可以使用该apply方法并将其称为:console.log.apply(console, array).
但是有一种新的ES6方法可以使用spread运算符和迭代器来应用参数
console.log(...array).

知道这一点,并且FormData和两个数组都有一个Symbol.iterator方法在它的原型中你可以简单地做到这一点而不必循环它,或者调用.entries()以获得迭代器的持有

var fd = new FormData

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

console.log(...fd)
Run Code Online (Sandbox Code Playgroud)

  • 传播运算符!!优秀且非常简单,将表单数据显示为伪 Json 格式。谢谢 - 对于新回复,我只是得到 [[PromiseStatus]]:"pending" (3认同)
  • 或者从Web控制台只写`[... fd]` (3认同)
  • 这里最好的答案 - 应该删除所有的 Gumpf 并只留下第二个代码片段 - 非常感谢 (2认同)

Gho*_*cho 37

我用的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]); 
}
Run Code Online (Sandbox Code Playgroud)

还有formData.get()formData.getAll()与更广泛的浏览器支持,但他们只带来了价值,而不是重点.有关详细信息,请参阅链接.

  • 最后很容易看到FormData对象!升级到Chrome 50(昨天发布,2016年4月13日)后,这对我有用. (3认同)
  • var pair*of*为我抛出错误.用*in*替换它似乎至少打印一些东西,但它不是像MDN状态那样的键或值. (2认同)

Asi*_*ali 11

简单的方法

我在 angular 8 中使用了这段代码

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

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

Run Code Online (Sandbox Code Playgroud)


小智 10

在某些情况下,使用:

for(var pair of formData.entries(){... 
Run Code Online (Sandbox Code Playgroud)

是不可能的.

我已经用这个代码代替了:

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);
Run Code Online (Sandbox Code Playgroud)

这不是一个非常聪明的代码,但它的工作原理......

希望它有所帮助.


Hoo*_*ing 8

ES6 +解决方案:

要查看表单数据的结构:

console.log([...formData])
Run Code Online (Sandbox Code Playgroud)

要查看每个键值对:

for (let [key, value] of formData.entries()) {
  console.log(key, ':', value);
}
Run Code Online (Sandbox Code Playgroud)


Bur*_*kan 8

您可以使用 Array.from()

console.log(Array.from(formData.entries()))
Run Code Online (Sandbox Code Playgroud)

  • 更好的东西: `console.log(Object.fromEntries(body))` - 你不需要 `entries()` 部分 (3认同)

Gur*_*urt 6

当我在Angular 5+(使用TypeScript 2.4.2)上工作时,我尝试如下进行操作,除了静态检查错误外,它均有效,但也 for(var pair of formData.entries())无法正常工作。

formData.forEach((value,key) => {
      console.log(key+" "+value)
});
Run Code Online (Sandbox Code Playgroud)

formData.forEach((value,key) => {
      console.log(key+" "+value)
});
Run Code Online (Sandbox Code Playgroud)

在Stackblitz检查