javascript - FormData 对象始终为空

标签 javascript php form-data

我正在尝试使用 FormData 创建要在发布请求(到 PHP 脚本)中发送的表单数据。

但是,FormData 对象始终为空:

var oReq = new XMLHttpRequest();
var url = "http://www.test.com/test.php";
oReq.open("POST", url, true);
oReq.setRequestHeader("Content-Type","multipart/form-data");
var myFormData = new FormData();
myFormData.append("formType","PDF");
myFormData.append("pdf", pdf.output(),"thisPDF.pdf");
oReq.send(myFormData);

'pdf' 变量是一个 jsPDF 对象(我已经检查它是一个有效的对象并且我试图删除该行并且只发送“测试”表单数据元素。然而,myFormData 始终是一个空的对象。希望我只是在这里遗漏了一些简单的东西。

此外,当我尝试检查 PHP 脚本中的表单元素是否存在时,它根本没有显示 $_POST 和 $_FILE 元素。

附加信息:

当我尝试这段代码时:

var oReq = new XMLHttpRequest();
var url = "http://www.test.com/test.php";
oReq.open("POST", url, true);
oReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var myFormData = new FormData();
myFormData.append("formType","PDF");
alert(JSON.stringify(myFormData));
oReq.send(myFormData);

然后我可以在 php 脚本中访问“formType”$_POST 变量。但是,如果我将 File append 语句添加到 myFormData 对象(并保持相同的“Content-Type”),则 PHP 脚本会返回“不允许访问”错误。

但是,在这两种情况下,$_POST 都是根据 isset($_POST) 设置的,并且在插入文件的情况下,$_FILE 变量是根据 isset($_FILE) 设置的。

最佳答案

从代码中删除 oReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");。如果您在 FormData 中添加文件,浏览器会自动设置 multipart/form-data header 。

关于javascript - FormData 对象始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355499/

相关文章:

javascript - 导出到 CSV 文件分隔符问题

javascript - 刷新页面显示找不到文件错误如何使用 [angular js + NodeJS/ExpressJS] 解决

php - 如果提交另一个表单,为什么 php 在一个表单中输入空白值或重复值

javascript - 单击单选按钮时,显示/隐藏具有动态变化的 ID 或类的 div

javascript - 为什么使用 new FormData() 时指定 [0]?

javascript - knockoutjs 单击绑定(bind)在嵌套的 foreach 中不起作用

javascript - 如何等待Ajax成功:function to succeed to work next

php - 为什么第一次调用没有E_NOTICE错误?

javascript - 同一页面上的两个 JQuery Ajax 调用

node.js - 如何使用 node.js 请求模块设置内容长度