2017-04-04 115 views
2

我已經閱讀了近20個不同的論壇帖子/ stackoverflow問題/回答關於這個,但我只是無法得到這項工作。我已經使用jQuery/PHP大約5年了,但這是我第一次需要使用AJAX做這樣的事情。

所以......現在,我只是測試並嘗試上傳.txt文件,並嘗試使用file_get_contents()獲取其內容,並將其發送回我的JS代碼。

我已經刪除了所有花哨的工作人員並簡化了我的檔案,就像我可以,所以這是我的HTML文件:

<div class="container-fluid"> 
    <div class="row"> 
     <div class="col-xs-12"> 
      <form id="uploadForm" action="url/to/php/script"> 
       <input type="file" name="frame" /> 
       <input type="submit" value="UPLOAD" /> 
      </form> 
     </div> 
    </div> 
</div> 

和我的JS

$("#uploadForm").bind('submit',(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     url: 'url/to/php/script', 
     type: "POST", 
     data: new FormData(this), 
     contentType: false, 
     cache: false, 
     processData: false, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
})); 

,並在我的PHP腳本我有var_dump($_FILES)這給我空陣列。

我的JS &窗體是從一個stackoverflow的答案複製。網址:$_POST and $_FILES empty after AJAX file upload - 因爲它被標記爲有效,但對我來說......仍然是空的。

通常情況下我的表格有enctype="multipart/form-data"method="post"但是沒有區別。

我的jQuery的lib目錄下:http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js

我來到這裏是因爲我覺得自己有沒有更多的事情,我可以嘗試,不管我做什麼,$_FILES數組爲空。

+1

您正在使用*非常*,***非常舊的jQuery版本。嘗試將其升級到至少1.12。理想情況下,3.2,如果你不需要傳統的IE支持 –

+1

你必須使用multipart/formdata作爲表單類型 – mtizziani

+0

@Rory McCrossan哦....我的上帝....我已經從我的我的jquery lib複製以前的項目,但我想這次我從舊項目中複製它。哈哈我改變我的庫爲1.12,它現在的作品。謝謝!:) –

回答

2

你的AJAX邏輯是罰款。這個問題是因爲您使用的是過時的jQuery版本,並且在過去的幾年中對AJAX邏輯進行了許多調整 - 尤其是因爲支持FormData以及通過發送二進制數據AJAX。

您應該將jQuery升級到至少1.12,如果您不需要傳統IE支持,最好是3.2。

0
use new version jquery library like this, your ajax code looks good so for this requirement need to update your jquery library . you use old library in that case it is not working 

http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js 

更多信息

https://code.jquery.com/jquery/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
$("#uploadForm").on('submit',(function(e) { 
e.preventDefault(); 
$.ajax({ 
    url: "url/to/php/script", 
    type: "POST", 
    data: new FormData(this), 
    contentType: false, 
    cache: false, 
    processData: false, 
    success: function(data){ 
     console.log(data); 
    }   
}); 
})); 
</script>