Javascript XHR发送多部分/表单数据

Javascript XHR发送多部分/表单数据,javascript,xmlhttprequest,multipartform-data,Javascript,Xmlhttprequest,Multipartform Data,我正在尝试发送多部分/表单数据内容类型请求: var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState==4){ alert(xhr.responseText); } } xhr.open("POST", url, true); xhr.setRequestHeader("Content-Type","multipart/form-data;

我正在尝试发送多部分/表单数据内容类型请求:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){
    if(xhr.readyState==4){
         alert(xhr.responseText);
    }
}

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

xhr.send('-----------------------------275932272513031 Content-Disposition: form-data; name="name"

test

----------------------------275932272513031--');
然后在php中,我只打印
$\u POST
数组

print_r($_POST);
但每次我都会得到一个空数组。我希望看到

Array (
    name => "test"
)

我做错了什么?

您的代码失败,因为您使用了“回车”而不是转义的换行符(
\n
)。

JavaScript不支持
“第一行[输入]第二行”
。如果需要带换行符的字符串,请使用
“第一行\n第二行”

一旦您解决了这个问题,您的代码应该按预期工作(有一个警告,请参阅最后一个注释):

var xhr=new-XMLHttpRequest();
xhr.onload=函数(){
警报(xhr.responseText);
};
xhr.open(“POST”,url,true);
setRequestHeader(“内容类型”,“多部分/表单数据;边界=------------------------------------275932272513031”);
xhr.send('------------------------------------275932272513031\n'+
'内容处置:表单数据;name=“name”\n\n'+
'测试\n\n'+
'----------------------------275932272513031--');

注意:您的代码只适用于由UTF-8字符组成的有效负载,不适用于二进制数据。如果您想了解有关通过XMLHttpRequest提交包含二进制数据的表单的更多信息,请参阅及其链接引用。

为什么不能使用jQuery?@Glavić我这样做是出于教育目的,请发布反映真实代码的代码。您当前的代码甚至没有运行。转义行终止符在哪里?JavaScript不支持
“第一行[Enter]第二行”
。相反,如果您想获得一个包含换行符的字符串,则必须使用
“第一行\n第二行”
。有很好的XMLHttpRequest使用示例,甚至还有文件上传。真棒,感谢您的参考,现在真的解释了很多!提到边界分隔符总是以两个(额外的)破折号作为前缀,并在正文末尾以两个以上的破折号作为后缀,这可能会有所帮助。也就是说,如果标题中有
…boundary=bound750
,那么正文中需要
--bound750\n
--bound750--
作为最后一行…并且边界中根本不需要破折号。将post更改为
boundary=275932272513031
,然后将每行的两个连字符更改为
--275932272513031
(以澄清要求)