我注意到,对于我的POST请求,我不得不使用:
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
或者会有错误。
但是,当发送FormData对象作为我唯一的数据时,我没有设置requestHeaders并且工作正常。
我发现这很奇怪,一个需要一个标题,一个不需要。只是想验证。
MDN docs状态
// xhr.setRequestHeader("Content-type", "multipart/form-data");
隐式使用。 I.E.实际上并没有设置此标头,因为它默认用于表单数据。
设置它实际上会导致错误。根据文档设置它是正确的,这会破坏你的代码。
来自文档:
如果设置了编码类型,它将使用与表单相同的格式 到“multipart / form-data”。
是否有任何正式文档描述了如何使用此FormData,即如何正确使用它与ajax。
我使用反复试验让它工作但我想要一个可靠的参考,所以我对我的代码更有信心。
答案 0 :(得分:0)
正确的编码类型是您用于表单数据的任何编码。标题的目的是告诉服务器主机解释您正在发送的数据。
这是否重要取决于服务器应用程序如何处理数据。如果它读取原始输入,则标题无关紧要。但是如果它使用由库或运行时环境提供的表单处理,例如填写$_POST
的PHP,则必须对表单数据进行编码,并且标题必须与编码匹配。