Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我需要包含enctype=";“多部分/表单数据”;通过表单发送数据时,但不要';通过xmlhttprequest发送时不需要_Javascript_Html_Ajax_Forms - Fatal编程技术网

Javascript 为什么我需要包含enctype=";“多部分/表单数据”;通过表单发送数据时,但不要';通过xmlhttprequest发送时不需要

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("

当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("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'})取而代之。