创建 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 成功回调中重新启用