1. 程式人生 > >關於Ajax無法下載檔案到瀏覽器本地的問題

關於Ajax無法下載檔案到瀏覽器本地的問題

最近在做網站的時候遇到這樣一個功能,在如圖所示的頁面中,需要使用者點選連結的時候,能夠以非同步Ajax的方式判斷伺服器中是否儲存有相應的Excel檔案,如果沒有的話就提示使用者沒有找到,如果有的話就下載到使用者本地。


當然,這是很簡單的一個問題,按照一般方式編寫Ajax就可以了。但是當伺服器端把檔案內容以二進位制的形式返回到瀏覽器端,瀏覽器的Ajax卻丟擲了錯誤。大致是ParseError, Invalid XML PK一類的錯誤資訊。


造成這個問題的原因,並不是伺服器端程式碼或者javascript程式碼有問題,而是通過Ajax下載檔案的這種方式本來就是禁止的。出於安全因素的考慮,

javascript是不能夠儲存檔案到本地的,所以ajax考慮到了這點,只是接受xml,ajax,json格式的返回值,二進位制的返回格式就會丟擲這個異常。

如何解決這個問題?用window.location = url的方式就可以了。有人會問,像上圖這樣的需求,在某個頁面的時候點選下載連結,因為改變了window.location的值,豈不是當前頁面就要被跳轉了?事實是,我用的是Chrome瀏覽器,當點選那個link的時候,直接就彈出了這邊的下個檔案儲存的對話方塊,而且頁面位址列也沒有任何變化。這時候如果點選Save,檔案就會保持,點選Cacel,操作就會取消,過程中當前頁面會一直保持,不會跳轉到其他頁面。