Javascript 为什么我需要包含enctype=";“多部分/表单数据”;通过表单发送数据时,但不要';通过xmlhttprequest发送时不需要
当HTML表单包含Javascript 为什么我需要包含enctype=";“多部分/表单数据”;通过表单发送数据时,但不要';通过xmlhttprequest发送时不需要,javascript,html,ajax,forms,Javascript,Html,Ajax,Forms,当HTML表单包含时,我需要在表单上指定enctype=“multipart/form data”属性。但是,当我通过XMLHttpRequest发送二进制文件时,我不需要在任何地方指定该类型: var builder = new BlobBuilder(); builder.append("Hello world!"); var blob = builder.getBlob("text/plain"); var oReq = new XMLHttpRequest(); oReq.open("
时,我需要在表单上指定enctype=“multipart/form data”
属性。但是,当我通过XMLHttpRequest
发送二进制文件时,我不需要在任何地方指定该类型:
var builder = new BlobBuilder();
builder.append("Hello world!");
var blob = builder.getBlob("text/plain");
var oReq = new XMLHttpRequest();
oReq.open("POST", url, true);
oReq.send(blob);
为什么会这样?使用表单,您可以告诉浏览器如何格式化数据以将其发送到服务器。(enctype的默认值不支持文件)
使用XHR,您可以自己格式化数据。(也就是说,您应该仍然使用
addHeader
为您的帖子正文指定合适的内容类型)。谢谢。当你说如何格式化数据时,你是什么意思?你能提供一个链接来解释这一点吗?因此,对于XHR,我会这样做-oReq.setRequestHeader(“内容类型”,“应用程序/zip”)
-如果我正在传输压缩存档,对吗?如果您正在发送一个zip文件,而不是以任何其他数据格式包装它,那么是的,这就是您应该使用的内容类型。我刚刚找到了编码如何影响请求体中数据表示的一个很好的解释。我是否正确地假设,如果我像这样放置内容oReq.send(“此处的文本”)
它将在请求正文中看起来像是使用了text/plain
加密?它将被编码为text/plain,而不是HTML表单提交将使用的text/plain enctype(这对于任何实际用途都是无用的),而且它根本不会被加密BlobBuilder
已经被弃用了一段时间,请使用var blob=new blob(['Hello world!'],{type:'text/plain'})代码>取而代之。