最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實現(xiàn)在頁面刷新時成功發(fā)送停止請求

 更新時間:2023年11月16日 09:55:00   作者:楊柒柒  
最近接到一個需求,需要在頁面刷新或者關(guān)閉瀏覽器標簽頁的時候觸發(fā)停止當前sql的接口,所以本文小編給大家詳細介紹了解決方案和實現(xiàn)代碼,需要的朋友可以參考下

問題背景

最近接到一個需求,需要在頁面刷新或者關(guān)閉瀏覽器標簽頁的時候觸發(fā)停止當前sql的接口。

解決方案

首先想到生命周期函數(shù)beforeDestroy,但很可惜,beforeDestroy只是在組件被銷毀時觸發(fā),關(guān)閉tab時進程都殺掉了,并不會觸發(fā)。

然后,想到用beforeunloadunload獲取到頁面刷新或者關(guān)閉瀏覽器標簽頁的時機,并調(diào)用相應(yīng)的接口。此時發(fā)現(xiàn)接口是發(fā)了,但是頁面刷新時有了如下問題:

這是因為頁面刷新會自動取消axios的異步請求。

當然此時也有解決方案,比如用原生的XMLHttpRequest,設(shè)置為同步請求,對于ajax,設(shè)置$.ajax({ url: "some.php", async: false})即可同步請求。

但是改成同步請求后會阻礙頁面的卸載,也就是說如果請求很慢,你明明點了刷新點了關(guān)閉,卻會一直卡在當前界面中,用戶體驗就很不友好了。

最后通過查閱資料,找到了navigator.sendBeacon的方案,它是非阻塞請求,不會卡住。

當然它也有一定缺陷,不能在控制臺的network找到請求,只能通過抓包或者后端日志的形式判斷是否調(diào)用了該接口,好在此缺陷并不影響需求,又解決了請求卡住的問題,因此可用。

方案實現(xiàn)代碼

_stopSql (sql) {
    let formData = new FormData()
    formData.append('regionId', regionId)
    formData.append('dbName', dbName)
    formData.append('sql', sql)
    navigator.sendBeacon(`${origin}/stop`, formData)
 }

到此這篇關(guān)于JavaScript實現(xiàn)在頁面刷新時成功發(fā)送停止請求的文章就介紹到這了,更多相關(guān)JavaScript頁面刷新成功發(fā)送停止內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

合阳县| 弋阳县| 延边| 延安市| 厦门市| 芷江| 松溪县| 株洲县| 青海省| 曲沃县| 滦平县| 阿拉善盟| 井陉县| 额济纳旗| 九江县| 池州市| 乐安县| 汉源县| 凤冈县| 卓尼县| 迁西县| 峨山| 保山市| 广州市| 依安县| 庄浪县| 西宁市| 东平县| 灵寿县| 上思县| 惠东县| 承德市| 湄潭县| 乾安县| 灵川县| 本溪市| 吉首市| 平阳县| 左贡县| 鄂尔多斯市| 望城县|