2017-02-07 104 views
0

我有一個帶有文本框和文件上傳的窗體。當用戶點擊按鈕。將文本框的值將文件上傳名稱保存到數據庫並將文件上傳到服務器。我沒有經驗使用AJAX做。所以,非常感謝任何幫助。如何在CodeIgniter 3.0中使用AJAX上傳文件?

這是我的形式:

<form enctype="multipart/form-data" accept-charset="utf-8" name="f_complaint" id="f_complaint"> 
    <input type="text" name="i_complaint" id="id_complaint" class="cl_complaint" /> 
    <input type="file" name="i_file" id="id_file" class="cl_file" /> 
    <input type="button" id="btn_upl" value="Save your complaint" class="btn btn-primary" /> 
</form> 

這是我的AJAX:

<script src="<?php echo base_url('assets/inspinia/js/jquery-2.1.1.js'); ?>"></script> 
<script src="<?php echo base_url('assets/jquery-ui/jquery-ui.js'); ?>"></script>  
<script type="text/javascript"> 
$(document).ready(function() { 
    var url = "<?php print base_url(); ?>complaint/saveadd"; 
    $('#btn_upl').on('click', function() { 
     var formData = new FormData($(this).parent('form')[0]); 
     //alert(url); 

     $.ajax({ 
      url : url, 
      type  : 'POST', 
      data  : formData, 
      success : function (returndata) { 
       alert(returndata); 
      } 
     }); 
    }); 
}); 
</script> 

這是我的控制器:

public function saveadd() { 
    $config['upload_path']  = FCPATH."assets/uploads/"; 
    $config['max_size']   = '307200'; 
    $config['file_name']   = "FILE - ".$_FILES['i_file']['name'];; 
    $config['overwrite']  = TRUE; 
    $this->load->library('upload', $config); 
    $this->upload->initialize($config); 
    if (! $this->upload->do_upload('i_file')) { 
     //return false; 
     redirect('app/'); 
    } else { 
     redirect('complaint/add'); 
    } 
} 

什麼是錯的代碼?即使警報不被解僱。我不想使用插件

+0

控制檯中的任何錯誤?該網址看起來不正確,據我瞭解,它需要一個完整的路徑 –

+0

@SergioAlen沒有錯誤 – Shota

+0

我在其他項目(也具有上傳文件,但不使用ajax)使用相同的網址,它工作正常 – Shota

回答

0

代碼有什麼問題?即使警報不被解僱。

這是什麼錯誤。 1.您的提醒在AJAX成功時被調用,意味着一旦ajax調用成功完成。但是,在您的CI控制器中,您正在重定向ajax調用,因此您的AJAX調用從未完成,並且永遠不會返回到「success function(returndata):」塊。

現在,解決這個只需替換下面的代碼。

//return false; 
    redirect('app/'); replace with, 
    echo "upload failed";exit; 

redirect('complaint/add'); replace with 
echo "upload finished";exit; 

此返回值將在 「returndata」 JS變量返回。

+0

另請參閱鏈接@sintakonte在評論中共享以使用AJAX上傳/傳遞圖像文件。 – JoshulSharma

+0

文件未上傳且警報不起作用 – Shota

+0

在您的控制器中進行調試。放一個回聲「文本」;退出;在你的「saveadd」函數的第一行中,並在瀏覽器的開發者控制檯中檢查你的AJAX請求。 – JoshulSharma

0

下面是使用ajax和codeigniter上傳文件的參考。我的事情是使用Ajax上傳文件的最佳方式。

https://code.tutsplus.com/tutorials/how-to-upload-files-with-codeigniter-and-ajax--net-21684