2013-07-09 35 views
6

我知道已經有這個問題的問題,但我仍然無法做到這一點。需要一些幫助。把輸入文件放入FormData jQuery提交到PHP

我需要上傳帶有附加數據的文件。

我input.php:

<input type="file" id="foto_path" name="foto_path" /> 
<input type="button" value="Add" onclick="javascript:sendForm()" /> 

我發送使用javascript:

function sendForm() { 
    var fileInput = document.querySelector('#foto_path'); 
    var oMyForm = new FormData(); 
    var nip=123223374;//it will be generated by php, for temporary i just hardcode it 
    oMyForm.append("foto_path", fileInput); 
    oMyForm.append("nip",nip); 
    var oReq = new XMLHttpRequest(); 
    oReq.open("POST", "upload-file.php", true); 
    oReq.onload = function(oEvent) { 
     if (oReq.status == 200) { 
      //oOutput.innerHTML = "Uploaded!"; 
      alert('success'); 
     } else { 
      //oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.<br \/>"; 
      alert('failed'); 
     } 
     }; 
    oReq.send(oMyForm); 
} 

當我發送上傳-file.php:

logapp("post -> ".print_r($_POST,true));//logapp is just function to log to file 
logapp("files -> ".print_r($_FILES,true)); 

我得到這個從日誌:

09/07/2013 02:47:06 pm :: post -> Array 
(
    [foto_path] => [object HTMLImageElement] 
    [nip] => 123223374 
) 

09/07/2013 02:47:06 pm :: files -> Array 
(

) 

我得到了成功警報,但我需要得到文件foto_path$_FILES$_POST。 我的問題是爲什麼輸入文件檢測爲$_POST["foto_path"]而不是$_FILES["foto_path"]。如何將其更改爲$_FILES["foto_path"],以便我可以開始處理上傳的文件?

+0

檢查這個問題[上傳文件使用Ajax的XmlHttpRequest] [1] [1]:http://stackoverflow.com/questions/6211145/upload-file-with-ajax-xmlhttprequest – maketest

+0

我仍然在'$ _POST'中有'[object HTMLImageElement]'如何將其更改爲文件? –

+0

請注意,IE <= 9不支持'formData()'。但是,現在看起來不是這樣。 –

回答

5

更新:我終於

var ft=$('#foto_path_upload')[0].files[0]; 
oMyForm.append("foto_path_upload", ft); 

解決了這個問題,這我得到這個從日誌:

09/07/2013 04:26:53 pm :: files -> Array 
(
    [foto_path_upload] => Array 
     (
      [name] => noimages.jpg 
      [type] => image/jpeg 
      [tmp_name] => D:\xampp\tmp\php4E90.tmp 
      [error] => 0 
      [size] => 3642 
     ) 

)  

問題解決了。感謝名單大家

+0

爲什麼我們使用[0]來訪問文件上傳元素 - '$('#foto_path_upload')[0]' – Arjit

+0

對不起,我忘記了爲什麼我使用[0]。也許是因爲我有很多ID爲「foto_path_upload」的元素,所以它需要特別說明哪一個我想訪問...只是嘗試沒有它.. –

+0

@Arjit可能是一個遲到的回覆,但他正在使用[0]你可以直接使用var file = document.getElementById(「foto_path_upload」)。files [0];)從jquery對象 得到一個dom對象。 – themightysapien