2015-03-30 241 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中添加文件