2014-12-07 79 views
0

我試圖建立一個允許在PHP中上傳文件的應用程序。上傳文件時,應將下載鏈接附加到特定的div。我正在使用ajax調用來運行php腳本,這樣我就可以將文件下載鏈接回顯,而不會陷入到php頁面中。 (我希望是有道理的。)

下面是HTML:

<form action="php/upload.php" method="POST" enctype="multipart/form-data" id="uploadform"> 
       Select file to upload: 
       <input type="file" name="fileToUpload" id="file"> 
       <input id="create" type="submit" value="Upload File"> 
</form> 

這裏是外部JavaScript/jQuery的,使AJAX調用:

$(function() { 
    $('form').on('submit', function (e) { 
      //prevents reloading of page 
      e.preventDefault(); 
      //get file data 
      var file_data = $("#file").prop("files")[0]; 
      var form_data = new FormData(); 
      form_data.append('file', file_data); 
      //run upload.php script and append result to draggable block 
      $.ajax({ 
      type: 'post', 
      url: 'php/upload.php', 
      cache: false, 
      data: form_data, 
      success: function (data) { 
       $("#draggable"+i).append(data); 
       i++; 
      } 
      }); 

     }); 
}); 

這裏是外部PHP腳本應該上傳的文件:

<?php 

    $target_path = "../uploads/"; 
    $target_path = $target_path . basename($_FILES[ 'fileToUpload' ][ 'name' ]); 

    if (move_uploaded_file($_FILES[ 'fileToUpload' ][ 'tmp_name' ] , $target_path)){ 
     //echo '<a href=' . $target_path . ' download>Download</a>'; 
    } 
    else { 
     echo $target_path; 
     //var_dump($_FILES); 
    } 

我得到以下錯誤:Uncaught TypeError:非法調用

問題來自於嘗試在ajax調用中傳遞'form_data'。我試圖這樣做,因爲$ _FILES數組一旦運行了php腳本就會變空。我需要一種方法來確保我上傳的文件存儲在該數組中。

+0

可能重複http://stackoverflow.com/questions/20818854/upload-image-with-ajax-and -php) – Forien 2014-12-07 00:49:17

回答

3

自己解決。需要幾件事情添加到Ajax調用:

$.ajax({ 
      type: 'post', 
      url: 'php/upload.php', 
      cache: false, 
      ** contentType: false, ** 
      ** processData: false, ** 
      data: new FormData(this), 
      success: function (data) { 
       $("#draggable"+i).append(data); 
       i++; 
([使用Ajax和PHP上傳圖片]的