FormData vs jQuery#serialize(),有什么区别?

FormData vs jQuery#serialize(), What is the difference?

最近我正在使用 AJAX 提交表单。

在研究最佳方法时,我看到一些 AJAX 提交使用 jQuery#serialize() 和其他使用 FormData。例如。

一个提交是这样做的:

data: $('form').serialize()

而另一个:

var formData = new FormData($('form')[0]);
data: formData

那么FormDatajQuery#serialize()有什么区别呢?

从使用的角度来看,主要区别在于您不能序列化文件,只能序列化文件名....value 文件输入。

FormData 另一方面,如果适用,对象还包括文件。

另外 serialize() 将在不支持 FormData API 的旧版浏览器中工作,例如 IE < 10

引用FormData docs

一个更重要的区别是表单中空输入字段的处理方式。

serialize()
仅包含具有值的输入字段。 key/value 对中将缺少未选中的复选框或空输入字段。因此,您的应用程序的后端将不得不做一些簿记,以便将丢失的键解释为空值。
FormData
将为您提供所有表单字段及其值的完整列表。即使它们是空的。