1

我注意到对于我的 POST 请求,我必须使用:

xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

否则会有错误。

但是,当发送一个 FormData 对象作为我唯一的数据时,我没有设置 requestHeaders 并且一切正常。

我发现这很奇怪,一个需要标题而一个不需要。只是想验证一下。

MDN文档指出

// xhr.setRequestHeader("Content-type", "multipart/form-data");

被隐式使用。IE 实际上并没有设置此标头,因为它默认用于表单数据。

设置它实际上会导致错误。这是正确的,根据文档设置它会破坏你的代码。

从文档:

如果编码类型设置为“multipart/form-data”,它使用与表单相同的格式。

是否有任何正式文档描述如何使用此 FormData,即如何正确使用 ajax。

我已经通过反复试验让它工作了,但我想要一个可靠的参考,所以我对我的代码更有信心。

4

1 回答 1

0

正确的编码类型是您用于表单数据的任何编码。标头的目的是告诉服务器主机解释您发送的数据。

这是否重要取决于服务器应用程序如何处理数据。如果它读取原始输入,则标题无关紧要。但是如果它使用库或运行环境提供的表单处理,例如PHP填充$_POST,表单数据必须进行编码,并且表头必须与编码匹配。

于 2013-06-12T18:28:27.683 回答