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,则可以查看发布数据
这里是如何检查发布数据
- 转到networking选项卡
- 查找您要发送发布数据的链接
- 点击它
- 在标题中,您可以检查请求有效负载来检查发布数据
你可以看到你需要使用console.log(formData.getAll('your key'))
; 观看https://developer.mozilla.org/en-US/docs/Web/API/FormData/getAll