最近在做檔案下載下傳,背景寫了個控制層,直接走進去應該就可以下載下傳檔案,各種檔案圖檔,excel等
但是起初老是下載下傳失敗,并且彈出下面的亂碼:

前台請求代碼:
$('#fileexcel').unbind('click').bind('click',function(){
alert("我要下載下傳了");
$.ajax({
type:'post',
url:'media',
data:null,
async:true,
success : function(msg){
alert(msg);
}
})
})
看起來貌似沒有任何問題,但就不能下載下傳。
本來認為是背景代碼有問題,但是将網上的各種demo放進去還是有問題。
在坑了一天後,終于發現問題所在了。
那就是請求方式有問題,檔案下載下傳的請求是不能寫在ajax裡面的!
寫成下面這樣的就可以了:
<a href="/media">點選下載下傳Excel</a>
或者
location.href = '/media';
這次點選下載下傳就出現如下理想效果。
然後總結一下為什麼下載下傳請求不能放在ajax裡發送:
原因:因為response原因,一般請求浏覽器是會處理伺服器輸出的response,例如生成png、檔案下載下傳等,然而ajax請求隻是個“字元型”的請求,即請求的内容是以文本類型存放的。檔案的下載下傳是以二進制形式進行的,雖然可以讀取到傳回的response,但隻是讀取而已,是無法執行的,說白點就是js無法調用到浏覽器的下載下傳處理機制和程式。