摘要:類型處理正常下載時(shí)直接返回響應(yīng)數(shù)據(jù)請(qǐng)求出錯(cuò)時(shí),接口返回的內(nèi)容是,于是將中的內(nèi)容取出中的內(nèi)容頁面自動(dòng)開始下載也可以讓后端設(shè)置文件名,通過返回參考博客
之前因?yàn)閼?,異步?qǐng)求的下載都是直接寫在a標(biāo)簽里,請(qǐng)求權(quán)限讓后端做特殊處理判斷,就像這樣
點(diǎn)擊下載
現(xiàn)在覺得這樣處理不太好,一個(gè)是后端權(quán)限要做多帶帶判斷,另一個(gè)是如果調(diào)用接口報(bào)錯(cuò)就沒辦法處理了,研究之后修改了一下,項(xiàng)目用了axios這個(gè)lib,所以是針對(duì)axios的request和response做了修改,不過對(duì)于原生寫法和其他庫,原理是一樣的1.將請(qǐng)求的responseType設(shè)置為blob
function exportData(p) { return axios({ url: "/data/export", method: "get", params: p, responseType: "blob" }); }2.對(duì)response進(jìn)行處理
因?yàn)轫?xiàng)目里用了response攔截器來處理響應(yīng),所以我在攔截器里做了處理,也可以多帶帶處理。
axios.interceptors.response.use( response=> { // ... // Blob類型處理 let checkType = response.config.responseType; if(checkType === "blob" && res.type === "application/octet-stream") { // 正常下載時(shí)直接返回響應(yīng)數(shù)據(jù) return response.data } else if(checkType === "blob" && res.type === "application/json") { // 請(qǐng)求出錯(cuò)時(shí),接口返回的內(nèi)容是json,于是將blob中的內(nèi)容取出 let reader = new FileReader(); reader.onload = function(event){ let content = reader.result; // blob中的內(nèi)容 Message({ message: JSON.parse(content).desc, type: "error", duration: 5 * 1000 }) }; reader.readAsText(response.data); return Promise.reject("error") } // ... }, error => { // ... } )3.html頁面自動(dòng)開始下載
exportData(para).then(res => { let content = res; let aTag = document.createElement("a"); let blob = new Blob([content]); aTag.download = "Datas.xlsx"; // 也可以讓后端設(shè)置文件名,通過headers返回 aTag.href = URL.createObjectURL(blob); aTag.click(); URL.revokeObjectURL(blob); }).finally(() => { })
參考博客:https://www.cnblogs.com/coder...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105257.html
摘要:零延遲零延遲并不是意味著回調(diào)函數(shù)立刻執(zhí)行。異步編程的中方法包括回調(diào)函數(shù)事件監(jiān)聽采用事件驅(qū)動(dòng)模式。執(zhí)行完成后,立即觸發(fā)事件,從而開始執(zhí)行。所謂對(duì)象,就是代表了未來某個(gè)將要發(fā)生的事件通常是一個(gè)異步操作。 JavaScript單線程與瀏覽器多線程 Javascript是單線程的:因?yàn)镴S運(yùn)行在瀏覽器中,是單線程的,每個(gè)window一個(gè)JS線程。作為瀏覽器腳本語言,JavaScript的主要...
摘要:高級(jí)程序設(shè)計(jì)摘錄可選。表示通過屬性指定的代碼的字符集。這個(gè)屬性并不是必需的,如果沒有指定這個(gè)屬性,則其默認(rèn)值仍為。規(guī)范要求腳本按照它們出現(xiàn)的先后順序執(zhí)行,因此第一個(gè)延遲腳本會(huì)先于第二個(gè)延遲腳本執(zhí)行,而這兩個(gè)腳本會(huì)先于事件執(zhí)行。 《javascript高級(jí)程序設(shè)計(jì)》摘錄: async:可選。表示應(yīng)該立即下載腳本,但不應(yīng)妨礙頁面中的其他操作,比如下載其他資源或 等待加載其他腳本。只對(duì)外部...
摘要:一標(biāo)簽中得屬性的使用已經(jīng)廢棄。當(dāng)瀏覽器遇到這個(gè)字符串是會(huì)認(rèn)為當(dāng)前的腳本已經(jīng)執(zhí)行結(jié)束,即使是字符串也需要這樣執(zhí)行,如果這個(gè)確實(shí)需要被做為字符串處理,那必須進(jìn)行轉(zhuǎn)義就像這樣。二標(biāo)簽應(yīng)該放到頁面最底部嗎一定要放在的最底部嗎 一、script 標(biāo)簽中得屬性的使用 1、language 已經(jīng)廢棄。 2、 type 對(duì)于普通的的javascript類型的文件不需要添加, 因?yàn)椴惶砑幽J(rèn)為text/...
摘要:加載的模塊會(huì)以參數(shù)形式傳入該函數(shù),從而在回調(diào)函數(shù)內(nèi)部就可以使用這些模塊。異步加載,和,瀏覽器不會(huì)失去響應(yīng)它指定的回調(diào)函數(shù),只有前面的模塊都加載成功后,才會(huì)運(yùn)行,解決了依賴性的問題。插件,可以讓回調(diào)函數(shù)在頁面結(jié)構(gòu)加載完成后再運(yùn)行。 這次主要是對(duì)《高性能JavaScript》一書的讀書筆記,記錄下自己之前沒有注意到或者需要引起重視的地方 第一章 加載和執(zhí)行 js代碼在執(zhí)行過程中會(huì)阻塞瀏覽...
摘要:性能訪問字面量和局部變量的速度是最快的,訪問數(shù)組和對(duì)象成員相對(duì)較慢變量標(biāo)識(shí)符解析過程搜索執(zhí)行環(huán)境的作用域鏈,查找同名標(biāo)識(shí)符。建議將全局變量存儲(chǔ)到局部變量,加快讀寫速度。優(yōu)化建議將常用的跨作用域變量存儲(chǔ)到局部變量,然后直接訪問局部變量。 缺陷 這本書是2010年出版的,這本書談性能是有時(shí)效性的,現(xiàn)在馬上就2018年了,這幾年前端發(fā)展的速度是飛快的,書里面還有一些內(nèi)容考慮IE6、7、8的東...
閱讀 1255·2023-04-25 18:57
閱讀 2142·2023-04-25 16:28
閱讀 3947·2021-11-24 09:39
閱讀 3641·2021-11-16 11:45
閱讀 1831·2021-10-13 09:40
閱讀 1272·2019-08-30 15:52
閱讀 1725·2019-08-30 10:57
閱讀 671·2019-08-29 16:55