2017-07-25 72 views
0

我想上傳使用jQuery文件提交表單。這裏的形式:通過jQuery FORMDATA

<form id="upload_data" class="project" enctype="multipart/form-data" method="POST"> 

<select id="project_id" name="project_id"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
</select> 

<input type="file" id="data" name="data" /> 

<input type="hidden" name="user_id" id="user_id" value="12" required> 

<button type="submit" id="ajax" class="btn btn-primary">Submit</button> 
</form> 

這裏的jQuery的一部分:

$('#upload_data').submit(function(e) { 

     var form = $('form'); 
     var formData = new FormData(); 

       $.each($(':input', form), function(i, fileds){ 
        formData.append($(fileds).attr('name'), $(fileds).val()); 
       }); 

       $.each($('input[type=file]',form)[0].files, function (i, file) { 
        formData.append(file.name, file); 
       }); 

$.ajax({ 
     url: '../controllers/process.php', 
     type: 'POST', 
     enctype: 'multipart/form-data', 
     data: formData, 
     processData: false, 
     contentType: false, 
     success: function(data) 
     { 
      alert(data); 
     }, 
     error: function(data) 
     { 
      alert(data); 

     } 
    }); 

    }); 

的問題是,我在process.php漸漸空虛後的值:

if (isset($_POST['project_id']) AND isset($_POST['user_id'])){ 
    //process 
}else{ 
echo 'No post data'; 
} 

,它總是返回「不發佈數據「(但在控制檯中,我可以看到數據已發佈,但在服務器中並非如此)。我在這裏錯過了什麼?

+0

你的代碼看起來很好,雖然沒有'enctype'屬性,因此您可以刪除,你可以通過只是在做'無功FORMDATA =新FORMDATA縮短'FormData'對象人口(形式[0]);'和刪除'$ .each()'調用。要檢查您的AJAX邏輯,設置''

元件上的'action'和正常提交,看看你的PHP收到這樣 –

+0

也許你正在尋找錯誤的可變數據,因爲你要發送一個文件,你不會找到$ _post ..檢查$ _FILES – Gunnrryy

+0

https://developer.mozilla.org/de/docs/Web/API/FormData/append 嘗試:formData.append('file',file,file.name) ; – DanielO

回答

0

如果要附加一個文件FORMDATA

formData.append(file.name, file); 

您需要使用這個版本的方法按MDN文檔

formData.append(name, value, filename); 

,讓你呈現一個字段名,文件數據和文件名

你也可以考慮只submiting形式本身,而無需使用FORMDATA

+0

我也嘗試了這些。但服務器腳本沒有獲取所有發佈數據。 –

+0

'您需要根據MDN文檔使用此版本的方法'這不是事實。如果你閱讀文檔,你會看到最後一個參數是可選的 –

0

謝謝所有您的回覆。問題是關於max_upload_filesizepost_max_size。我增加了這些選項的值,現在它正在工作。謝謝。