在vue中使用ajax原聲程式碼進行匯出操作
一、背景
因公司需要,我需要在原有的程式碼上進行迭代操作,需要對匯出進行許可權過濾,header中新增token以及UID等一系列的引數用於攔截資訊,但由於請求之前是使用的window.location.href="xxxxxx"進行的跳轉下載,所以無法在此基礎上進行標頭檔案引數新增操作,並且之前並沒有對get請求的引數進行統一處理
二、解決方法
1、遇到這個問題我首先想到的就是使用ajax方法,在請求之前進行header引數的新增,話不多說我們開始寫程式碼
執行
可以看出我們的請求是成功了,但是你會發現並沒有excl表格被下載下來,後來發現是因為ajax在匯出表格的時候是無法成功下載的,那我們換一種方式來進行下載,使用原生的ajax寫一個類似form表單提交的方式
2、
postExcelFile(param){
var xhr ;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{//code for IE6,IE5
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
//匯出路徑以及引數
var url = exportDoubtForProvinceUrl(param) + "?resultId="+this.logId+"&uid="+this.$store.state.user.userId;
console.info("url:" + url);
//設定響應型別為blob型別
xhr.responseType = "blob";
//設定請求型別為get
xhr.open("get", url, true);
let uuid = UUID.createUUID();
uuid = uuid.replace(/\-/g, '');
//設定header引數 token
xhr.setRequestHeader("token",uuid);
//設定header引數 userid
xhr.setRequestHeader("iscUserId",this.getIscUserId(uuid));
console.info("iscUserId:" + this.getIscUserId());
//onload是隻有在執行的時候會起作用
xhr.onload = function () {
let result = true; //預設介面呼叫失敗
let blob = xhr.response; //xhr.response -->blob 資料來源
let fr = new FileReader(); //FileReader可以讀取Blob內容
fr.readAsText(blob); //二進位制轉換成text
fr.onload = function (e) { //轉換完成後,呼叫onload方法
result = fr.result; //result 轉換的結果
console.info("返回資料:" + e);
}
//此處是用來區分後臺的資料來源是檔案、圖片流,還是我們的告警資訊,(如果是告警資訊,size會很短)
if(blob.size < 200) {
result = false;
}
if (result) {
//獲取響應檔案流
let blob = this.response;
let reader = new FileReader();
// 轉換為base64,可以直接放入a表情href
reader.readAsDataURL(blob);
reader.onload = function (e) {
//解決瀏覽器相容性問題
let objectUrl = window.URL.createObjectURL(blob);
// 轉換完成,建立一個a標籤用於下載
let a = document.createElement('a');
a.href = objectUrl;
a.download = '結果明細.xls';
//a.click(); //一般到了這就可以了,但是火狐和google可能會有問題,需要下面的一步操作才可以下載成功,否則會下載下一個沒有字尾名的檔案
// 修復瀏覽器中無法觸發click
$("body").append(a);
a.click();
$(a).remove();
}
}else{
console.info("匯出異常" + result.msg);
}
}
xhr.send();
},
從括號裡面的數值就知道我測試了多少次,這也是我從各大大佬的部落格裡面參考過來進行測試的結果
相關文章
- 在 Oracle JDeveloper 中進行 Ajax 程式設計(轉)OracleDeveloper程式設計
- 使用go在mongodb中進行CRUD操作MongoDB
- 重疊IO操作在進行中
- 使用 iotop 監控哪些程式在進行I/O操作
- 使用Dbeaver 進行資料的匯入和匯出
- 原聲ajax與jquery ajax請求的區別jQuery
- 使用管道符在PowerShell中進行各種資料操作
- Java進行excel的匯入匯出操作JavaExcel
- 【匯出匯入】% 在匯入匯出中的應用。
- vue - Vue中的ajaxVue
- 怎樣使用AJAX進行應用程式開發(轉)
- 如何使用帝國CMS進行資料庫匯出操作?資料庫
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- expdp在匯出時對資料大小進行評估
- 原聲寫法操作table
- oracle windows下使用批處理進行exp匯出OracleWindows
- 在 Django 中使用 Celery 來進行耗時操作Django
- 在SAP WebClient UI裡使用AJAX進行非同步資料讀取WebclientUI非同步
- vue excel匯入匯出VueExcel
- 在C++程式中匯出Word文件的方法(轉)C++
- 使用go語言對csv檔案進行解析處理,匯入匯出。Go
- Springboot操作Poi進行Excel匯入Spring BootExcel
- Vue中級指南-01 如何在Vue專案中匯出ExcelVueExcel
- 在vue專案中 使用driver.js來進行頁面分步引導VueJS
- Vue匯出ExcelVueExcel
- 【Vue】HutoolExcel匯出VueExcel
- 使用新操作碼在比特幣現金上進行首次原子競猜比特幣
- Mysql透過workbench對錶進行匯出匯入MySql
- Jquery ajax載入等待執行結束再繼續執行下面程式碼操作jQuery
- VUE中使用 tableExport 匯出xlsx檔案VueExport
- 使用vue匯出excel遇到的那些坑VueExcel
- php原聲實現分頁程式碼示例PHP
- 操作問題:在傢俱ERP中匯出產品資料提示
- 在Linux中,如何使用指令碼進行系統配置和部署?Linux指令碼
- 在 PBootCMS 中,使用 {php} 和 {eval} 標籤可以在模板中執行 PHP 程式碼bootPHP
- Vue使用中遇到的程式碼問題Vue
- 在Javascript中進行面向切面程式設計JavaScript程式設計
- 在PHP中進行curl開啟操作的具體教程PHP