javascript - FormData 的正确编码类型是什么?

标签 javascript

我注意到对于我的 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/

相关文章:

javascript - PHP switch case HTML 多选

javascript - 在 D3 转换中获取预期的属性值

javascript - 如何仅当先前输入具有有效值时才显示输入字段?

javascript - 启用文本输入

javascript - 我该如何修复此错误 : "Uncaught TypeError: Cannot set property ' borderBottom' of undefined at "MyClassName" "?

javascript - Typescript 不/不能在泛型上使用传递的类型

javascript - 使用 Node.js 和 Express.js 以及 AngularJs 和 nodemailer 发送电子邮件不发送邮件

javascript - PHP - 未检测到 isset($_POST ['rejectSeed' ])

javascript - jQuery 向下查找多个级别的子元素

javascript - Firebase 云函数 onCall 在更改区域后不起作用