2015-03-30 251 views
4

我正尝试创建表单数据以使用FormData发送到一个发布请求(到PHP脚本)。FormData对象始终为空

然而,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); 

然后我就可以访问 “formType” $ _ POST变量在PHP脚本。但是,如果我将File append语句添加到myFormData对象(并保留相同的'Content-Type',PHP脚本错误返回一个“不允许的访问”错误。

但是,$ _POST是根据isset($ _ POST),并且插入文件$ _FILE变量根据isset($ _ FILE)设置。

+0

你知道变量声明会被提升到任何块范围的顶部,所以在某些行后面声明变量可能会变成undefined – iamwhitebox 2015-03-30 20:24:50

+0

虽然这是真的,但这不是他的问题回覆。即使我将该声明移动到块的顶部,它仍然显示为空。而不是nil/null,而是一个空的FormData对象。 – 2015-03-31 01:45:09

回答

1

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