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

标签 javascript xmlhttprequest multipartform-data

我正在尝试发送一个 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 中我只打印 $_POST 数组

print_r($_POST);

但我每次都得到一个空数组。我希望看到

Array (
    name => "test"
)

我做错了什么?

最佳答案

您的代码失败是因为您使用了“Enter”而不是转义换行符 (\n)。
JavaScript 不支持 "first line[Enter]second line"。如果您需要带换行符的字符串,请使用 "first line\nsecond line"

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

var xhr = new XMLHttpRequest();
xhr.onload = function() {
     alert(xhr.responseText);
};
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type","multipart/form-data; boundary=---------------------------275932272513031");
xhr.send('-----------------------------275932272513031\n' +
         'Content-Disposition: form-data; name="name"\n\n' +
         'test\n\n' +
         '----------------------------275932272513031--');

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

关于Javascript XHR 发送多部分/表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20730489/

相关文章:

javascript - XMLHTTPRequest 返回错误请求 (400) - "Require Param: grant_type"

php - 图像未通过 Objective C 中的 POST 上传到服务器

php - 如何使用 multipart/form-data 编码发布数组?

java - 使用 Apache HTTP 客户端创建多部分/表单数据实体

javascript - 使用开放天气 map API 地理位置调用时出现 400 错误请求?

javascript - 使用具有相同名称的多个字段的 jquery 验证

javascript - 如何确保工厂 promise 在指令执行之前解决

javascript - Azure 移动服务中的 CORS 设置去哪里了

ssl - 如何在 react native XMLHttpRequest API 或 Fetch Api 中禁用 ssl 检查?

javascript - 如何获得 XMLHttpRequest 的响应?