我注意到对于我的 POST 请求,我必须使用:
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
否则会出现错误。
但是,当发送 FormData 对象作为我唯一的数据时,我没有设置 requestHeaders 并且一切正常。
我发现这很奇怪,一个需要 header ,一个不需要。只是想验证一下。
MDN docs说明
// xhr.setRequestHeader("Content-type", "multipart/form-data");
隐式使用。 IE。实际上并不设置此 header ,因为它默认用于表单数据。
设置它实际上会导致错误。没错,根据文档设置它会破坏您的代码。
来自文档:
It uses the same format a form would use if the encoding type were set to "multipart/form-data".
是否有任何正式文档描述如何使用此 FormData,即如何正确使用 ajax。
我已经通过反复试验让它工作了,但我想要一个可靠的引用,所以我对我的代码更有信心。
最佳答案
正确的编码类型是您用于表单数据的任何编码。 header 的目的是告诉服务器主机解释您发送的数据。
这是否重要取决于服务器应用程序处理数据的方式。如果它读取原始输入,则 header 无关紧要。但如果使用库或运行时环境提供的表单处理,例如 PHP 填写 $_POST
,则必须对表单数据进行编码,并且 header 必须与编码匹配。
关于javascript - FormData 的正确编码类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072395/