下載以前用的window.location.href下載的,可是這個判別不了文件是否返回,小文件倒還好,大的文件長時間沒有下載也沒有加載條什麼的,用戶有時會點擊下載好幾下,大的數據很容易將服務拖垮,因此決定改良下,參考網上大神的,大概思路是:用ifram標籤下載,追加到文檔,下載完成移除,前端帶一個時間戳的cookie,後臺接收,下載完成以後返回,前端一個定時循環的函數去驗證是否是返回了時間戳,若是是確認下載成功css
前端代碼:前端
$("#mylink").click(function () { var iframe=document.createElement("iframe"); //指定iframe的路徑 iframe.src= dss.rootPath + "plugin/sjwfx/NineAddressNoLeisUreExport"; $(iframe).css("display","none"); //開始「數據正在加載」的進度條,提示用戶在導出數據 dss.alert("正在爲您導出數據,請稍後片刻"); dss.load(true); //追加元素到文檔 document.body.appendChild(iframe); //每隔一秒循環下里面代碼,若是是我返回的值,關閉加載 var interval = setInterval(function(){ //獲取返回的cookie var down = dss.cookie.get("resultId"); if(down=="75941785"){ //隱藏「數據正在加載」的進度條 dss.load(false); $(iframe).remove(); //關閉循環的時間函數 clearInterval(interval); } },1000); });
後臺添加這麼幾行代碼:cookie
Cookie cookie=new Cookie("resultId","75941785");//將時間戳設置到cookie中 cookie.setPath("/");//可能會出現前端js讀取不到,因此設置下 cookie.setMaxAge(10);//設置cookie生存時間,可調小一點 response.addCookie(cookie);//添加cookie
我前端沒有帶上時間戳,由於iframe的關係,我這是iframe嵌在iframe裏面的,後臺一直讀取不到我帶的cookie,百度了不少沒有很好的解決辦法,因此我是直接在後臺帶上值,前端識別,我是設置了cookie時間爲十秒就失效,注意:後臺若是配置文件配置了http-only,前端js是不能讀取操做的,還有就是setPath不是必須帶的,若是前端讀取不到,試着帶下,或者指定你的項目名。app