亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

在Web關(guān)閉頁面時(shí)發(fā)送Ajax請(qǐng)求的實(shí)現(xiàn)方法

2024-09-05 00:23:35
字體:
供稿:網(wǎng)友

前言

有時(shí)候我們需要在用戶離開頁面的時(shí)候,做一些上報(bào)來記錄用戶行為。又或者是發(fā)送服務(wù)器ajax請(qǐng)求,通知服務(wù)器用戶已經(jīng)離開,比如直播間內(nèi)的退房操作。

本文主要分兩部分來講解怎么完成退出行為的上報(bào)。

1.事件監(jiān)聽

瀏覽器有兩個(gè)事件可以用來監(jiān)聽頁面關(guān)閉,beforeunload和unload。

beforeunload是在文檔和資源將要關(guān)閉的時(shí)候調(diào)用的, 這時(shí)候文檔還是可見的,并且在這個(gè)關(guān)閉的事件還是可以取消的。比如下面這種寫法就會(huì)讓用戶導(dǎo)致在刷新或者關(guān)閉頁面時(shí)候,有個(gè)彈窗提醒用戶是否關(guān)閉。

window.addEventListener("beforeunload", function (event) { // Cancel the event as stated by the standard. event.preventDefault(); // Chrome requires returnValue to be set. event.returnValue = '';});

unload則是在頁面已經(jīng)正在被卸載時(shí)發(fā)生,此時(shí)文檔所處的狀態(tài)是:1.所有資源仍存在(圖片,iframe等);2.對(duì)于用戶所有資源不可見;3.界面交互無效(window.open, alert, confirm 等);4.錯(cuò)誤不會(huì)停止卸載文檔的過程。

基于以上兩個(gè)方法就可以實(shí)現(xiàn)對(duì)頁面關(guān)閉的事件監(jiān)聽了,為了穩(wěn)妥,可以兩個(gè)事件都監(jiān)聽。然后對(duì)監(jiān)聽函數(shù)做處理,讓關(guān)閉事件只調(diào)用一次。

2.請(qǐng)求發(fā)送

有了上面的監(jiān)聽,事情只完成了一半,如果我們?cè)诒O(jiān)聽中直接發(fā)送ajax請(qǐng)求,就會(huì)發(fā)現(xiàn)請(qǐng)求被瀏覽器abort了,無法發(fā)送出去。在頁面卸載的時(shí)候,瀏覽器并不能保證異步的請(qǐng)求能夠成功發(fā)出去。

我們有幾種方式可以解決這個(gè)問題:

方案1: 發(fā)送同步的ajax請(qǐng)求

var oAjax = new XMLHttpRequest();oAjax.open('POST', url + '/user/register', false);//false表示同步請(qǐng)求oAjax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");oAjax.onreadystatechange = function() { if (oAjax.readyState == 4 && oAjax.status == 200) { var data = JSON.parse(oAjax.responseText); } else { console.log(oAjax); }};oAjax.send('a=1&b=2');

這種方式雖然有效,但是用戶需要等待請(qǐng)求結(jié)束才可以關(guān)閉頁面。對(duì)用戶的體驗(yàn)不好。

方案2:發(fā)送異步請(qǐng)求,并且在服務(wù)端忽略ajax的abort

雖然異步請(qǐng)求會(huì)被瀏覽器abort,但是如果服務(wù)端可以忽略abort,仍然正常執(zhí)行,也是可以的。比如PHP有ignore_user_abort函數(shù)可以忽略abort。這樣需要改造后臺(tái),一般不太可行..

方案3:使用navigator.sendBeacon發(fā)送異步請(qǐng)求

根據(jù)MDN的介紹:

這個(gè)方法主要用于滿足 統(tǒng)計(jì)和診斷代碼 的需要,這些代碼通常嘗試在卸載(unload)文檔之前向web服務(wù)器發(fā)送數(shù)據(jù)。過早的發(fā)送數(shù)據(jù)可能導(dǎo)致錯(cuò)過收集數(shù)據(jù)的機(jī)會(huì)。然而, 對(duì)于開發(fā)者來說保證在文檔卸載期間發(fā)送數(shù)據(jù)一直是一個(gè)困難。因?yàn)橛脩舸硗ǔ?huì)忽略在卸載事件處理器中產(chǎn)生的異步 XMLHttpRequest 。

從介紹上可以看出,這個(gè)方法就是用來在用戶離開時(shí)發(fā)請(qǐng)求的。非常適合這種場(chǎng)景。

使用方式是這樣的:

navigator.sendBeacon(url [, data]);

sendBeacon支持發(fā)送的data可以是ArrayBufferView, Blob, DOMString, 或者 FormData 類型的數(shù)據(jù)。

下面是幾種使用sendBeacon發(fā)送請(qǐng)求的方式,可以修改header和內(nèi)容的格式,因?yàn)橐话愫头?wù)器的通信方式都是固定的,如果修改了header或者內(nèi)容,服務(wù)器就無法正常識(shí)別出來了。

(1)使用Blob來發(fā)送

使用blob發(fā)送的好處是可以自己定義內(nèi)容的格式和header。比如下面這種設(shè)置方式,就是可以設(shè)置content-type為application/x-

blob = new Blob([`room_id=123`], {type : 'application/x-www-form-urlencoded'});navigator.sendBeacon("/cgi-bin/leave_room", blob);

Web,發(fā)送,Ajax

(2)使用FormData對(duì)象,但是這時(shí)content-type會(huì)被設(shè)置成"multipart/form-data"。

var fd = new FormData();fd.append('room_id', 123);navigator.sendBeacon("/cgi-bin/leave_room", fd);

Web,發(fā)送,Ajax

(3)數(shù)據(jù)也可以使用URLSearchParams 對(duì)象,content-type會(huì)被設(shè)置成"text/plain;charset=UTF-8" 。

var params = new URLSearchParams({ room_id: 123 })navigator.sendBeacon("/cgi-bin/leave_room", params);

Web,發(fā)送,Ajax

通過嘗試,可以發(fā)現(xiàn)使用blob發(fā)送比較方便,內(nèi)容的設(shè)置也比較靈活,如果發(fā)送的消息抓包后發(fā)現(xiàn)后臺(tái)沒有識(shí)別出來,可以嘗試修改內(nèi)容的string或者h(yuǎn)eader,來找到合適的方式發(fā)送請(qǐng)求。
參考鏈接:

  • sendBeacon API not working temporarily due to security issue, any workaround?
  • Sending AJAX Data when User Moves Away / Exits from Page
  • Setting HTTP Headers in a Beacon Request

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JSP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
天海翼一区二区| 亚洲中文字幕无码不卡电影| 无码人妻精品一区二区三区9厂| 成人a视频在线观看| 天堂在线视频网站| 激情视频在线观看免费| 日韩一区二区在线观看| 97在线视频国产| 香蕉视频国产在线观看| 456亚洲影院| 久久精彩免费视频| 亚洲资源网你懂的| 无码国产伦一区二区三区视频| 成人免费无遮挡| 午夜在线不卡| 一区二区三区不卡在线视频| 日本va欧美va欧美va精品| 亚洲综合偷拍欧美一区色| 校园春色 亚洲| 中文字幕乱码在线观看| 亚洲jjzzjjzz在线观看| 亚洲国产精品国自产拍av| 妞干网这里只有精品| 性18欧美另类| 亚洲深夜视频| 黄色电影在线免费观看| 国产欧美日韩免费看aⅴ视频| 日韩不卡av| 欧美日韩国产一区二区在线观看| 国产aⅴ精品一区二区四区| 国内毛片毛片毛片毛片毛片| 在线播放一级片| 一区二区三区四区欧美日韩| 国产一区二区三区精品欧美日韩一区二区三区| 91欧美一区二区| 在线视频日韩一区| 亚洲欧美色视频| 国产三级欧美三级| 美女黄网久久| 色伊人久久综合中文字幕| av小说天堂网| 国产午夜麻豆影院在线观看| 亚洲一区中文字幕在线观看| 国产精品99久久久久久成人| 亚洲精品一区二区三区蜜桃久| 国产一二三区在线| 中国人体摄影一区二区三区| 久久久男人的天堂| 久久精品国产99久久99久久久| 国产人妖一区二区三区| 天天综合网天天综合| 尤物免费看在线视频| 亚洲3p在线观看| 青青草免费观看完整版高清| 麻豆久久久久久| 日日夜夜综合| 国产成人亚洲综合a∨猫咪| 日韩在线 中文字幕| 美女网站免费看| 综合中文字幕亚洲| 亚洲第一网站在线观看| 啊啊啊久久久| 日韩成人中文电影| 182午夜视频| jizzjizzjizz亚洲日本| 激情久久综合| 国产 日韩 欧美一区| 91网站免费观看| 中文字幕第一页在线视频| 全网国产福利在线播放| 日本中文字幕精品—区二区| 精品人妻无码一区二区| 国产麻豆剧传媒精品国产| 99精品国产福利在线观看免费| 欧美美女视频| 午夜影视一区二区三区| 精品国产美女a久久9999| 国产免费高清视频| 伊人免费在线观看| kk眼镜猥琐国模调教系列一区二区| 综合 欧美 亚洲日本| 精品在线观看入口| 亚洲网中文字幕| 欧美三级黄网| 国产99久久久久久免费看| 欧美色视频一区二区三区在线观看| 激情小说激情视频| 欧美性猛交xxxx富婆| 在线免费一区三区| 国产精品久久占久久| 国产精品久久久久久搜索| 精品国产乱码久久久久久牛牛| 美女av免费在线观看| 欧美精品乱人伦久久久久久| 中文字幕天堂在线| 日韩欧美三级在线观看| 99精品久久久| 国产在线精品一区| 五月天婷婷激情| 国产日韩欧美夫妻视频在线观看| 成人免费毛片高清视频| 影音先锋在线资源中文字幕| 久久手机在线视频| 国产传媒一区| 亚洲最新av在线| 久久久久久不卡| 99这里有精品| 另类小说综合网| 国产视频91在线| 亚洲欧美日韩精品久久亚洲区| 亚洲欧美日韩精品久久久| 欧美中日韩一区二区三区| 亚洲黄网站黄| 亚洲一区二区三区乱码aⅴ| 国产91ⅴ在线精品免费观看| 天天撸夜夜操| 欧洲第一无人区观看| 午夜精品久久久久久久久久久| 红杏一区二区三区| 国产精品不卡视频| 国产 日韩 欧美 综合 一区| 国产区卡一卡二卡三乱码免费| 美女毛片一区二区三区四区最新中文字幕亚洲| 在线免费观看你懂的| 成人黄色短视频| 亚洲福利在线视频| 欧美极品一区二区| 91碰在线视频| 欧美狂野激情性xxxx在线观| 午夜久久福利| 欧美性久久久| 97精品视频在线| 无码人妻久久一区二区三区不卡| 黄页网址大全在线播放| 欧美一级黄色影院| 手机福利小视频在线播放| 成在线人视频免费视频| 粗大黑人巨茎大战欧美成人| 精品国产鲁一鲁一区二区张丽| 欧美视频在线播放一区| 性色av蜜臀av浪潮av老女人| 国产污污视频在线观看| 亚洲日日夜夜| 中文字幕国产亚洲| 九九热最新地址| 日本一区二区在线免费播放| 91精品视频免费看| 最好看的日本字幕mv视频大全| 日韩黄色免费电影| 青草在线视频在线观看| 欧美在线se| 欧美日韩免费观看中文| 久久免费区一区二区三波多野| 欧美视频中文一区二区三区在线观看| 九色porny丨国产首页在线| 国产精品久久久久久久第一福利| 一区二区视频在线播放| 日韩护士脚交太爽了| 舐め犯し波多野结衣在线观看| 亚洲精品一区二区精华| 男女网站在线观看| 久久久久久久久久久久久久久| 午夜免费播放观看在线视频| 中文字幕日韩一区二区| 麻豆视频免费在线观看| 久久不见久久见免费视频7| 国语对白精品一区二区| 黄色永久免费网站| 99re6热在线精品视频播放| 国产探花精品一区二区| 一本色道久久综合精品竹菊| 亚洲另类一区二区| 亚洲级视频在线观看免费1级| 亚洲免费电影在线观看| 日本不卡一区二区三区视频| 国产日韩视频| 欧美成人精品午夜一区二区| 99热在这里有精品免费| 91精品国产自产精品男人的天堂| 日本一区二区免费高清视频| 亚洲乱码av中文一区二区| 日本蜜桃在线观看视频| 婷婷开心激情综合| 亚洲一区二区av| 久久日免费视频| 国产精品永久久久久久久久久| 亚洲国产高清不卡| 久久av日韩| 五月婷婷狠狠干| 亚洲视频在线观看日本a| 麻豆国产精品视频| 国产真实有声精品录音| 亚洲午夜在线电影| 芒果视频成人app| 欧美国产一区二区三区激情无套| 欧美一二三区在线| 日本在线不卡视频| 男人的天堂va在线| 成人亚洲欧美激情在线电影| 伊人久久亚洲| 午夜影院免费版| 九九精品视频在线看| 国产一区二区视频网站| 欧美一区自拍| 五月婷婷一区二区| 久久久精品国产免费观看同学| 久久久久国产精品熟女影院| 成人性生交免费看| 91超碰在线播放| 91精品网站在线观看| 中文字幕色呦呦| 亚洲黄色一级大片| 久久看人人爽人人| 久久香蕉国产线看观看av| 国产福利在线观看| 国产成人免费av电影| 国产精品久久久久久久浪潮网站| 久久av综合| 美女视频免费一区| 免费日韩精品中文字幕视频在线| 女尊高h男高潮呻吟| 亚洲一区二区三区视频播放| 国产毛片一区二区三区| 欧美艹逼视频| 亚洲在线观看av| 亚洲视频欧洲视频| 欧美日韩久久久| 国产剧情av麻豆香蕉精品| 亚洲字幕成人中文在线观看| 亚洲成年人专区| 亚洲女则毛耸耸bbw| 久久亚洲av午夜福利精品一区| 国产精品久久乐| 妺妺窝人体色www在线观看| av高清一区二区| 被陌生人带去卫生间啪到腿软| 久久青青草原亚洲av无码麻豆| 久久嫩草捆绑紧缚| 草民午夜欧美限制a级福利片| 无码人妻aⅴ一区二区三区玉蒲团| 中文字幕不卡三区| 国产乱码精品一区二区三区中文| 91九色国产视频| 国产女同性恋一区二区| 国外成人免费视频| 久久成人激情视频| 日韩精品一区二区三区中文在线| 亚洲天天做日日做天天谢日日欢| 欧美精品在线视频观看| 亚洲尤物影院| 一级特黄特色的免费大片| 欧美做受高潮电影o| 亚洲大片精品永久免费| 高清在线一区| 国产精品爱久久久久久久小说| 小草在线视频在线免费视频| 国产亚洲精品日韩| 欧美另类bbbxxxxx另类| 国产传媒欧美日韩成人精品大片| 日韩在线欧美| yellow字幕网在线| 成年人网站免费看| 在线亚洲免费视频| 色吊一区二区三区| 91久久精品美女高潮| 国产欧美在线视频| 日本一二区不卡| 国产女人高潮时对白| 玖玖爱免费视频| 日批视频在线播放| 91caoporm在线视频| 99re这里只有精品首页| 午夜精品一区二区三级视频| 亚洲精品在线a| 一本岛在免费一二三区| 国产日韩欧美另类| 久久网一区二区| bt欧美亚洲午夜电影天堂| 高潮毛片在线观看| 免费精品99久久国产综合精品应用| 成人一级生活片| 精品日韩视频| 日韩欧美一区二区在线视频| 无需播放器的av| 日韩精品社区| 久久夜色精品亚洲噜噜国产mv| 国内成+人亚洲+欧美+综合在线| 国产小视频在线高清播放| 91精品久久久| 欧美乱大交xxxx| 日精品一区二区| 亚洲一级黄色片| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲免费中文| av在线亚洲一区| 日韩在线中文字幕视频| 99www免费人成精品| 精品伦精品一区二区三区视频密桃| 国产免费成人在线视频| 午夜视频在线免费播放| 可以免费看av的网址| 亚洲国产精品免费在线观看| 182在线视频| 国产人妻人伦精品| 亚洲免费av高清| 免费欧美一级片| 成人在线免费观看91| 亚洲美女久久久| 黄色污网站在线观看| 亚洲三级电影在线观看| 都市激情在线视频| 伊人狠狠av| 99精品视频免费看| 中文字幕一区二区三区在线视频| 亚州av电影免费在线观看| www.com日本| 亚洲成年人专区| 国产 欧美 在线| 日韩中文一区二区三区| 亚洲久久成人| 羞羞网站在线免费观看| 在线免费观看日本欧美| 无码人妻一区二区三区在线| 国产成人精品在线看| 中文日本在线观看| 午夜久久影院| 国产一区二区自拍视频| 人妻体内射精一区二区三区|