小编典典

XMLHttpRequest POST multipart / form-data

ajax

我想在JavaScript中使用XMLHttpRequest来发布包含文件类型输入元素的表单,以便避免页面刷新并返回有用的XML。

我可以使用JavaScript将表单上的目标属性设置为MSIE的iframe或Mozilla的对象,而无需刷新页面即可提交表单,但这有两个问题。较小的问题是目标与W3C不兼容(这就是为什么我在JavaScript中而不是在XHTML中设置目标)。主要问题是onload事件不会触发,至少在OS
X
Leopard的Mozilla上不会触发。此外,XMLHttpRequest可以提供更漂亮的响应代码,因为返回的数据可以是XML,而不像iframe那样局限于XHTML。

提交表单的结果类似于HTTP:

Content-Type: multipart/form-data;boundary=<boundary string>
Content-Length: <length>
--<boundary string>
Content-Disposition: form-data, name="<input element name>"

<input element value>
--<boundary string>
Content-Disposition: form-data, name=<input element name>"; filename="<input element value>"
Content-Type: application/octet-stream

<element body>

如何获取XMLHttpRequest对象的send方法来复制上述HTTP流?


阅读 306

收藏
2020-07-26

共1个答案

小编典典

您可以自己构造“ multipart / form-
data”请求(有关更多信息,请访问http://www.faqs.org/rfcs/rfc2388.html),然后使用该send方法(即xhr.send(your-
multipart -form-data))。同样,但更容易,在Firefox 4+(在Chrome 5+和Safari
5+)中,您可以使用FormData接口来帮助构造此类请求。该send方法适用于文本内容,但如果要发送二进制数据(例如图像),则可以借助sendAsBinary从Firefox
3.0开始的方法来实现。有关如何通过发送文件的详细信息XMLHttpRequest,请参阅http://blog.igstan.ro/2009/01/pure-
javascript-file-upload.html。

2020-07-26