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
那么FormData
和jQuery#serialize()
有什么区别呢?
从使用的角度来看,主要区别在于您不能序列化文件,只能序列化文件名....value
文件输入。
FormData
另一方面,如果适用,对象还包括文件。
另外 serialize()
将在不支持 FormData API 的旧版浏览器中工作,例如 IE < 10
一个更重要的区别是表单中空输入字段的处理方式。
serialize()
仅包含具有值的输入字段。 key/value 对中将缺少未选中的复选框或空输入字段。因此,您的应用程序的后端将不得不做一些簿记,以便将丢失的键解释为空值。
FormData
将为您提供所有表单字段及其值的完整列表。即使它们是空的。
最近我正在使用 AJAX 提交表单。
在研究最佳方法时,我看到一些 AJAX 提交使用 jQuery#serialize()
和其他使用 FormData
。例如。
一个提交是这样做的:
data: $('form').serialize()
而另一个:
var formData = new FormData($('form')[0]);
data: formData
那么FormData
和jQuery#serialize()
有什么区别呢?
从使用的角度来看,主要区别在于您不能序列化文件,只能序列化文件名....value
文件输入。
FormData
另一方面,如果适用,对象还包括文件。
另外 serialize()
将在不支持 FormData API 的旧版浏览器中工作,例如 IE < 10
一个更重要的区别是表单中空输入字段的处理方式。
serialize()仅包含具有值的输入字段。 key/value 对中将缺少未选中的复选框或空输入字段。因此,您的应用程序的后端将不得不做一些簿记,以便将丢失的键解释为空值。
FormData将为您提供所有表单字段及其值的完整列表。即使它们是空的。