一個全日制的學習後& &努力,我終於通過純AJAX放棄上傳文件(PS:這篇文章How can I upload files asynchronously with JQuery?埋葬了我最後的希望)爲什麼我不能異步上傳文件?
我的問題可能有點意義,但我還是想知道爲什麼ajax(或XMLHttpRequest)不能處理這個問題?爲什麼不能像真正的httprequest那樣傳輸文件?
一個全日制的學習後& &努力,我終於通過純AJAX放棄上傳文件(PS:這篇文章How can I upload files asynchronously with JQuery?埋葬了我最後的希望)爲什麼我不能異步上傳文件?
我的問題可能有點意義,但我還是想知道爲什麼ajax(或XMLHttpRequest)不能處理這個問題?爲什麼不能像真正的httprequest那樣傳輸文件?
由於安全原因,Javascript無法讀取本地文件,所以我們無法使用AJAX發送數據。
但是,您可以發佈標準HTML表單,並將表單目標設置爲頁面上的不可見iframe。這個iframe可以使用服務器端代碼來處理上傳。
如果您使用AJAX的原因是因爲您希望在文件上傳過程中使用進度條,請使用此方法使用服務器端靜態變量來存儲文件上傳的進度,然後使用AJAX向另一個HTTP頁面發送一個簡單的定時請求,該頁面只返回上傳進度。
正如更新的答案,以防有人使用Google,XMLHttpRequest 2級確實支持AJAX提交文件輸入。
瀏覽器支持:
它使用FORMDATA Javascript對象。
How to send FormData objects with Ajax-requests in jQuery?
不要忘記關閉過程數據和contentType中,如果你這樣做。
var fd = new FormData();
fd.append('file', input.files[0]);
$.ajax({
url: 'http://example.com/script.php',
data: fd,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
alert(data);
}
});
因爲JavaScript不能讀取本地文件 - 至少不是沒有一些HTML 5 API魔法的幫助。 –
@PeKKa這意味着AJAX請求(與JS)和表單請求(與HTML)是完全不同的東西?即使對瀏覽器? – rhapsodyn
不是真的 - 您可以使用Ajax構建任何類型的請求。它僅僅是出於安全原因訪問JavaScript中不可能的本地文件。 –