2013-08-20 80 views
1

我有以下形式:阿賈克斯文件上傳

<form method="post" enctype="multipart/form-data" id="upload" action="upload.php"> 
<input type="file" id="file" name="file" size="10"/> 
<input id="uploadbutton" type="button" value="Upload"/> 
</form> 

以下JavaScript:

$(document).ready(function() { 
    $("#uploadbutton").click(function() { 
     var filename = $("#file").val(); 

     $.ajax({ 
      type: "POST", 
      url: "upload.php", 
      enctype: 'multipart/form-data', 
      data: { 
       file: filename 
      }, 
      success: function (text) { 
       alert("Data Uploaded: " + text); 
      } 
     }); 
    }); 
}); 

及以下PHP(作爲測試)

echo json_encode($_POST); //uses post to check as $_FILES returns nothing 

警報將隨後儘管這是一個文件名,而不是實際的文件本身,但可以通過響應行"file: test.jpg"通知我。我怎樣才能轉換我的文件來獲取實際的文件,而不是文件的名稱。

預先感謝您。

+1

您根本無法這樣做。您將需要創建一個FormData對象並將其作爲數據發送,同時將processData設置爲false。請注意,由於某些瀏覽器不支持「FormData」對象,因此這些瀏覽器無法通過ajax上傳文件。 –

+0

兼容性開始成爲問題嗎? –

+1

是的。對於完全跨瀏覽器的解決方案(或作爲不支持formData的瀏覽器的後備),您可以將表單提交給隱藏的iframe。 –

回答

0

您使用的語法對於使用ajax上傳文件是錯誤的,您需要傳遞一個FormData對象作爲請求的數據並使用processData: false。但是,某些瀏覽器不支持FormData,因此您必須回退到在這些瀏覽器中發佈到隱藏的iframe。

1

您仍然可以使用「PUT」方法而不是「POST」方法,它將適用於除舊版本之外的所有瀏覽器。

請參閱:Topic

+0

缺乏支持是阻止我走下這條路的唯一原因,但感謝您的意見。 –

+0

沒問題,我最近一直在那裏:) – user2462805