2014-01-29 21 views
12

Here删除值的方式来append文件FormData如何从FORMDATA

var data = new FormData(); 
    jQuery.each($('#file')[0].files, function(i, file) { 
      data.append('file-'+i, file); 
    }); 

是有可能如下呢?

 data[i].remove();??? 
or data[i] = file;?? 

如何iIcan删除或data

+0

如果可以,请检查Firebug或Chrome控制台中'data'的值。 – bozdoz

+0

在我看来,没有可用的删除方法。使用FormData的想法是,它意味着为表单元素创建一个简单的AJAX包装器,并允许您在发送请求之前附加额外的数据。如果你想删除项目,我建议使用像jQuery这样的库,或者制作你自己的需要标准对象的AJAX包装器,以便你可以随意添加和删除项目。 https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects –

回答

22

你不能这样做不是附加资料转移到FORMDATA对象以外的任何修改的值。请参阅the Spec。如果您在实际构建对象之前使用字典/对象来存储想要添加/修改的所有值,那将会更好。

var data = {}; 
jQuery.each($('#file')[0].files, function(i, file) { 
    data['file-'+i] = file; 
}); 

//modify the object however you want to here 

var formData = new FormData(); 
for (var key in data) { 
    formData.append(key, data[key]); 
} 
+0

很好的答案,但不会数据['文件[]'] =文件更好? – Marcel

+0

该规范实际上存在于(在同一链接中),但没有被任何人实现。可能值得在将来查看。 –

+0

@Marcel只有当你发布的服务器需要它时,才需要它,在你的情况下,PHP。 –

2

我知道这个线程是旧的,但我刚刚发现这一点:https://developer.mozilla.org/en-US/docs/Web/API/FormData/delete

我河畔它可以帮助。您可以使用formData.delete(name)以“name”键删除formData的条目。

+0

这对我在iOS 10和Android 5.1上测试的2个移动浏览器不起作用 –

+0

在此处检查浏览器兼容性:https://developer.mozilla.org/de/docs/Web/API/FormData/delete#Browser_compatibility – wittich