2012-07-11 58 views
4

我试图同时使用FORMDATA张贴XMLHttpRequest来在头设置正确的边界设置边界:如何同时使用的XmlHttpRequest和FORMDATA

xhr.open("POST",url); 
xhr.setRequestHeader("Content-type","multipart/form-data; boundary=..."); 

var formData = new FormData(); 
formData.append("filename", inputId.files[0]); 
formData.append(...); 

xhr.send(formData); 

我如何获得的边界是在请求中设置标题在这里。我看到请求被设置,边界以某种方式在请求中创建。但服务器不知道如何解释它。

回答

17

只需手动设置Content-Type标题,浏览器将自动设置“multipart/form-data; boundary = ...”值。

如果你正在使用jQuery的contentType选项设置为false:

$.ajax({ 
    url: url, 
    type: 'POST', 
    data: formData, 
    processData: false, 
    contentType: false 
}); 
+0

原始海报请求xmlhttprequest而不是jquery – wondergoat77 2017-07-31 22:00:38

+0

@ wondergoat77如果您仔细阅读,您会注意到我在我的评论的第一行中回答了有关XMLHttpRequest的问题。它完全解决了这个问题。然后,我添加了第二部分,因为还有其他人可能来自Google并使用jQuery(当时很常见,那是2012年!)。在他们的情况下如何关闭Content-Type并不明显。 – 2017-08-02 10:52:29

2

尝试寻找这个,How to send multipart/form-data form content by ajax (no jquery)?我想这个脚本用PHP作为reciever工作,有一些问题,但结果喜忧参半的警告,我认为我的问题是,我已经破坏了脚本两端太多,它不再运作。

至于另一张海报的评论“如果您使用的是JQuery”,我唯一要说的是对那个不在JQuery中工作的人没有帮助,JQ不是全部并结束所有脚本。