创建 FormData 不包括未提供的输入文件
Create FormData excluding not provided input file
我通过 jQuery 手动提交表单。我将 FormData 与此表单中的所有输入元素一起使用。
请参阅下面的代码:
$("#submit-form").on('submit', function (event) {
event.preventDefault();
var form = $('#submit-form')[0];
var data = new FormData(form);
$.ajax({
type: "POST",
url: "my-best-handler",
data: data,
processData: false,
contentType: false,
cache: false,
timeout: 60000
});
});
其中一个输入元素是file,可以随意设置。未设置时,我不需要在 FormData 中使用它,也不需要与其他元素一起发送到请求处理程序。
问题是目前即使没有设置也会发送。
我很好奇如果它没有设置,我如何从 FormData 中排除它。
在最坏的情况下,我可以像 here.
一样手动创建 FormData
但我希望有 "black list" 类似的方法,通过从 FormData 或任何其他优雅的方式中删除未设置的文件。
更新:
我提出了以下解决方案:
if (!$("#input-file").val()) {
data.delete('input-file');
}
您可以使用 delete()
函数删除您的字段
var form = $('#submit-form')[0];
var data = new FormData(form);
if (!$("#input-file").val()) {
data.delete('input-file');
}
禁用输入方法。
永远不会提交禁用的表单控件
$("#submit-form").on('submit', function (event) {
event.preventDefault();
// disable before creating FormData
$(this).find(':file').prop('disabled', function(){
return !this.files.length;
});
var form = $('#submit-form')[0];
var data = new FormData(form);
如评论中所述,应在 ajax 成功回调中重新启用
我通过 jQuery 手动提交表单。我将 FormData 与此表单中的所有输入元素一起使用。 请参阅下面的代码:
$("#submit-form").on('submit', function (event) {
event.preventDefault();
var form = $('#submit-form')[0];
var data = new FormData(form);
$.ajax({
type: "POST",
url: "my-best-handler",
data: data,
processData: false,
contentType: false,
cache: false,
timeout: 60000
});
});
其中一个输入元素是file,可以随意设置。未设置时,我不需要在 FormData 中使用它,也不需要与其他元素一起发送到请求处理程序。 问题是目前即使没有设置也会发送。
我很好奇如果它没有设置,我如何从 FormData 中排除它。
在最坏的情况下,我可以像 here.
一样手动创建 FormData
但我希望有 "black list" 类似的方法,通过从 FormData 或任何其他优雅的方式中删除未设置的文件。
更新: 我提出了以下解决方案:
if (!$("#input-file").val()) {
data.delete('input-file');
}
您可以使用 delete()
函数删除您的字段
var form = $('#submit-form')[0];
var data = new FormData(form);
if (!$("#input-file").val()) {
data.delete('input-file');
}
禁用输入方法。
永远不会提交禁用的表单控件
$("#submit-form").on('submit', function (event) {
event.preventDefault();
// disable before creating FormData
$(this).find(':file').prop('disabled', function(){
return !this.files.length;
});
var form = $('#submit-form')[0];
var data = new FormData(form);
如评论中所述,应在 ajax 成功回调中重新启用