FormData.append(“key”,“value”)不起作用

你能告诉我这是什么错误的:

var formdata = new FormData(); formdata.append("key", "value"); console.log(formdata); 

我的输出看起来像这样,我找不到我的“关键” – “价值”对

 FormData *__proto__: FormData **append: function append() { [native code] } ***arguments: null ***caller: null ***length: 0 ***name: "append" ***prototype: append ***__proto__: function Empty() {} *constructor: function FormData() { [native code] } **arguments: null **caller: null **length: 0 **name: "FormData" **prototype: FormData **toString: function toString() { [native code] } *__proto__: Object **__proto__: Object **__defineGetter__: function __defineGetter__() { [native code] } **__defineSetter__: function __defineSetter__() { [native code] } **__lookupGetter__: function __lookupGetter__() { [native code] } **__lookupSetter__: function __lookupSetter__() { [native code] } **constructor: function Object() { [native code] } **hasOwnProperty: function hasOwnProperty() { [native code] } **isPrototypeOf: function isPrototypeOf() { [native code] } **propertyIsEnumerable: function propertyIsEnumerable() { [native code] } **toLocaleString: function toLocaleString() { [native code] } **toString: function toString() { [native code] } **valueOf: function valueOf() { [native code] } 

我不明白! 昨天它运行的很好,今天我的脑袋撞了很多次的键盘! Firefox,Chrome,两者相同:/

Chrome 50+和Firefox 39+(分别为44+)新增function:

  • formdata.entries() (结合Array.from()进行debugging)
  • formdata.get(key)
  • 和更多非常有用的方法

原始答案:

我通常用来debugging一个FormData对象,只是发送它(任何地方!),并检查浏览器日志(如Chrome开发工具的networking选项卡)。

你不需要一个/相同的Ajax框架。 你不需要任何细节。 只要发送它:

 var xhr = new XMLHttpRequest; xhr.open('POST', '/', true); xhr.send(data); 

简单。

你说这不起作用。 你期望发生什么?

没有办法从FormData对象中获取数据; 它只是用于发送数据和一个XMLHttpRequest对象(用于send方法)。

更新近五年后:在一些较新的浏览器中,这不再是真实的,现在您可以看到提供给FormData的数据,除了将数据填入数据之外。 有关更多信息, 请参阅接受的答案 。

你可能一直有同样的问题,我最初有。 我试图使用FormData来抓取所有的inputfile upload图像,但同时我想附加一个会话ID到传递到服务器的信息。 所有这一次,我想通过附加信息,你将能够通过访问该对象在服务器中看到它。 我错了。 当附加到FormData时,检查服务器上附加信息的方法是通过简单的$_POST['*your appended data*']查询。 像这样:

JS:

 $('form').submit(function(){ var sessionID = 8; var formData = new FormData(this); formData.append('id', sessionID); $.ajax({ url: "yoururl.php", data: formData, processData: false, contentType: false, type: 'POST', success: function(data){ alert(data); } }); }); 

然后在PHP上:

 $sessionID = $_POST['id']; $files = $_FILES['image']; $foreach ($files as $key=>val){ //... } 

如果您使用的是Chrome,则可以查看发布数据

这里是如何检查发布数据

  1. 转到networking选项卡
  2. 查找您要发送发布数据的链接
  3. 点击它
  4. 在标题中,您可以检查请求有效负载来检查发布数据

Chrome的DevTools

你可以看到你需要使用console.log(formData.getAll('your key')) ; 观看https://developer.mozilla.org/en-US/docs/Web/API/FormData/getAll