2013-11-20 82 views
1

我想使用ajax上傳文件,但我沒有在php $_FILES中獲取數據,我在$_REQUEST中獲取它。我該怎麼做。下面是我的jQuery代碼.Ajax不能用於文件上傳,所以是否有任何代碼,以便我可以合併現有的代碼來上傳文件。Php ajax文件上傳錯誤

<script> 
jQuery(function($){ 
    jQuery('#btn').click(function(){ 

     var data = {}, 
      ticks = []; 

     $('.ajax_elements').each(function(_, elem) { 
      data[this.id] = this.value; 

     }); 


     $.ajax({ 
      type : 'POST', 
      url : 'app_process.php', 
      data : data, 
      cache : false 
     }).done(function(result) { 
      alert(result); 
     }); 
    }); 
}); 
</script> 
<form name="frm" enctype="multipart/form-data"> 
    <input type="text" name="bb" class="ajax_elements" id="one"/> 
    <input type="file" class="ajax_elements" name="passport" id="passport" /> 
    <input type="button" name="bttn" id="btn" /> 
    </form> 

這裏是php文件代碼

<?php 
    if($_REQUEST['passport']!=''): 
     $uploaddir = 'images/'; 
     move_uploaded_file($_FILES["file"]["tmp_name"], $uploaddir . str_replace(" ","_",$_REQUEST['passport'])); 
    endif; 
?> 

錯誤消息

通知:未定義指數:文件中 G:\ XAMPP \ htdocs中\ data_ajax \ app_process.php on line

+0

發佈錯誤..無論您得到的是什麼 –

+0

您不能使用AJAX上傳文件,除非您使用HTML5文件API併發送原始數據或使用隱藏的iframe。 –

+0

是的,你可以。請參閱我的答案與jquery,但也可能沒有(請參閱鏈接@ vijay4vijju的答案) – Asenar

回答

0

有2個問題:

您需要添加屬性enctype="multipart/form-data"在表單標籤,如果你要上傳文件:

更換

<form name="frm"> 

通過

<form name="frm" enctype="multipart/form-data" > 

使用ajax(和jquery),你不能直接發送文件。但我建議你jquery form plugin誰可以幫助你

+0

我想知道爲什麼負面投票^^ – Asenar

+0

這個回答沒有什麼是錯的 – zzlalani

+0

爲什麼要爲這個投票 –

2

我的建議是看看XMLHttpRequest,FormDataFile API。 Mozilla Developer Network在所有這些方面都有很好的文檔。

這需要測試和調整要在你的開發環境更健壯,但沿着這個線的東西可以讓你開始...

<script> 
$('#btn').click(function() { 

    var xhr = new XMLHttpRequest(); 

    xhr.upload.addEventListener("load", function(e){ 
     // stuff to do when upload is complete 
    }, false); 

    xhr.upload.addEventListener("progress", function(e){ 
     // stuff here to handle progress bars, progress percentages etc. 
    }, false); 

    xhr.open('POST', 'app_process.php', true); 

    var formdata = new FormData(); 
    var file = $('#passport').get(0).files[0]; 

    formdata.append('passport', file); 

    xhr.send(formdata); 

}); 
</script> 

而PHP ...

<?php 
if (isset($_FILES['passport'])) { 
    $uploaddir = 'images/'; 
    $upload = move_uploaded_file($_FILES['passport']['tmp_name'], $uploaddir . str_replace(" ","_",$_FILES['passport']['name'])) or exit('Upload failed.'); 
} else { 
    exit('File not found'); 
} 
?> 

需要將與該文件一起發送的任何其他信息添加到FormData對象中。這些將顯示在PHP $_POST變量中。

formdata.append('field', 'data'); 

記住,這些API是沒有普遍的瀏覽器支持,所以最好的做法是用戶到達該點之前,包括所有常用的功能檢測腳本。

你也可以上傳功能結合到文件輸入,而不是要求一個按鈕,點擊更改事件......

$('#passport').change(function() { ... 

希望有所幫助。

+0

這是這整個線程中唯一正確/很好的答案。 –