最近在做的一個項目碰到一個問題,就是需要檢測什么時候導出成功並根據導出成功進行提示操作。開始是直接使用location.href,但是無法檢測到是否下載成功。
經過查找資料下載文件使用iframe可以做到,但是onload可以檢測到頁面加載 成功,無法檢測到下載加載成功。經過搜索資料發現一個解決,方案。原理如下:
在點擊下載按鈕時獲得一個時間戳並把時間戳發送給后台,后台響應成功后把發送的時間戳設置為cookie值,前端實時監測cookie值和前端的時間戳是否相等,相等就說明文件下載成功。
function exportExcelForm(obj){ var timer,flag=0; var _self=obj._self; var downloadToken=obj.time, url=obj.url, triggerDelay = 1000; _self.classList.add('disabled'); _self.innerHTML='導出中...'; timer=setTimeout(function() { function checkToken(){ var timerll=setInterval(function(){ var sertoken=getCookie(obj.key); if(sertoken&&(sertoken==downloadToken)){ clearTimeout( downloadTimer ); clearInterval( timerll ); frame.remove(); _self.classList.remove('disabled'); _self.innerHTML=obj.text; clearCookie(obj.key); flag=0; }else if(sertoken){ alert(obj.text+'失敗'); clearTimeout( downloadTimer ); clearInterval( timerll ); clearCookie(obj.key); _self.classList.remove('disabled'); _self.innerHTML=obj.text; } },100); } if(!flag){ flag=1; var frame=$('<iframe />').attr('src', url).attr('id','iframe_download_report').hide().appendTo('body'); var downloadTimer=setTimeout(checkToken,1000); } }, triggerDelay); }
$('#exportNewStock').on('click',function(){
var _self=this;
var downloadToken=+new Date();
var url =maochao+'stock/exportFinalStockExcelAllotNew.xlsx?brandname='+brandName+'&statisticsdate='+time+'&stockoutDay='+ditchCode+'&value='+downloadToken;
var obj={
_self:_self,
time:downloadToken,
url:url,
text:'導出新倉調撥模板',
key:'excel_new'
}
exportExcelForm(obj);
});
