天天看點

ajax請求不能下載下傳檔案(轉載)

最近在做檔案下載下傳,背景寫了個控制層,直接走進去應該就可以下載下傳檔案,各種檔案圖檔,excel等

但是起初老是下載下傳失敗,并且彈出下面的亂碼:

ajax請求不能下載下傳檔案(轉載)

前台請求代碼:

$('#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請求不能下載下傳檔案(轉載)

然後總結一下為什麼下載下傳請求不能放在ajax裡發送:

原因:因為response原因,一般請求浏覽器是會處理伺服器輸出的response,例如生成png、檔案下載下傳等,然而ajax請求隻是個“字元型”的請求,即請求的内容是以文本類型存放的。檔案的下載下傳是以二進制形式進行的,雖然可以讀取到傳回的response,但隻是讀取而已,是無法執行的,說白點就是js無法調用到浏覽器的下載下傳處理機制和程式。

繼續閱讀