天天看點

ajax下載下傳檔案

 今天遇到這樣一個需求,将查查出來的資料導出來,不是将所有的資料導出來,而是要導出滿足條件的資料,也就是說下載下傳的時候要将查詢的條件傳到背景。

例如: 先查詢課程性質是選修的課程然後導出來:

ajax下載下傳檔案

前台封裝條件的form:

背景springmcv接收查詢條件并且生成一個excel檔案到本地并且提供下載下傳:

接下來嘗試用ajax的post送出表單進行下載下傳:

結果:響應頭正确,資料也正确的傳到背景,但是未下載下傳檔案:

ajax下載下傳檔案
ajax下載下傳檔案

 總結:

  即使ajax請求到一個controller在跳轉到下載下傳的controller上也不能下載下傳,百度了一下總結下原因:發現原來jquery的ajax回調已經把response的資料傻瓜式的以字元串的方式解析.

第一種:将傳條件的以表單送出的方式進行(推薦這種)-----這種方式也可以用來頁面跳轉

第二種:以window.location.href="xxx"的方式請求下載下傳位址

  這種方法需要自己手動的拼接位址傳遞參數。get請求攜帶參數的方式:   xxxx.html?username=xxx&password=xxxx

第三種:動态建立表單加到fbody中,最後删除表單(推薦這種,可以将組合條件的值也動态的加入表單中)

注意:動态form必須加到dom樹,否則會報異常:form submission canceled because the form is not connected。而且送出完需要删除元素。

進一步完善代碼:

補充:    有時候上面查詢條件到不了第二個動态表單中,需要手動添加查詢條件到表單中,如下:

進一步封裝如下: (第一個參數是form元素的id,也就是查詢條件所在的form,第二個參數是下載下傳的url,會自動周遊條件并拼接查詢條件)

調用代碼:

【當你用心寫完每一篇部落格之後,你會發現它比你用代碼實作功能更有成就感!】

繼續閱讀