FormData对象始终为空

5

我正在尝试使用FormData创建表单数据,以便在post请求(发送到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对象(我已经检查过它是一个有效的对象,我也尝试过删除那一行代码,只发送“test”表单数据元素。但是我的FormData始终是一个空对象。希望我只是忽略了某些简单的东西。

另外,当我尝试在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变量。但是,如果我向myFormData对象添加文件追加语句(并保持相同的“Content-Type”),则PHP脚本会出现错误,返回一个“不允许访问”的错误。

然而,在两种情况下,$_POST都被设置为isset($_POST),并且插入文件后,$_FILE变量根据isset($_FILE)设置。


你知道变量声明会被提升到任何块级作用域的顶部,所以在某些行之后声明变量可能会出现未定义的情况。 - Jeff Voss
虽然那是对的,但这并不是问题所在。即使我将该声明移动到块的顶部,它仍然为空。而不是nil/null,而是一个空的FormData对象。 - Michael Reiland
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接