淺談window.onbeforeunload() 事件調(diào)用ajax
經(jīng)常有這樣的需求,就是在離開(kāi)某個(gè)web頁(yè)面時(shí),用戶不一定點(diǎn)注銷(xiāo),這樣會(huì)導(dǎo)致會(huì)話不能及時(shí)銷(xiāo)毀。為實(shí)現(xiàn)用戶離開(kāi)頁(yè)面時(shí),自動(dòng)注銷(xiāo)功能,需要在web頁(yè)面的onbeforeunload事件處理函數(shù)中發(fā)送注銷(xiāo)命令。這個(gè)地方大多用Ajax實(shí)現(xiàn)。有時(shí)還涉及到跨域訪問(wèn)的問(wèn)題。這個(gè)地方就存在瀏覽器的兼容性問(wèn)題。
瀏覽器在處理這個(gè)需求時(shí)的不兼容性有如下兩點(diǎn):
1、處理Ajax時(shí)的不兼容性,這里使用jQuery來(lái)解決。
2、在發(fā)送Ajax請(qǐng)求時(shí)的不兼容性
主要代碼如下:
function logout() { var logoutURL = "xxxx"; //用于注銷(xiāo)用戶的url if (logoutURL == "") return; var userAgent = navigator.userAgent.toLowerCase(); if(userAgent.indexOf("msie")>-1) { //IE $.ajax({ url: logoutURL, crossDomain: true, async: false, dataType: "jsonp" }); }else { //FireFox Chrome $.ajax({ url: logoutURL, async: false }); } } window.onbeforeunload = function () { logout(); };
代碼說(shuō)明:
firefox在處理js時(shí)的安全級(jí)別較高,很多IE、Chrome中js可以使用的權(quán)限在Friefox中被限制,因此通過(guò)
if(userAgent.indexOf("msie")>-1) { //IE }else { //FireFox Chrome }
這段代碼來(lái)判斷當(dāng)前瀏覽器類(lèi)型。
針對(duì)Firefox、Chrome的兼容代碼如下:
$.ajax({ url: logoutURL, async: false });
async需要設(shè)為false,即為同步,不能采用true異步的方式,否則請(qǐng)求有可能發(fā)不出去。其實(shí)Chrome也適用于下面針對(duì)IE的代碼,在關(guān)掉瀏覽器時(shí)會(huì)自動(dòng)發(fā)送注銷(xiāo)命令,但是點(diǎn)瀏覽器的刷新按鈕時(shí)也希望能自動(dòng)注銷(xiāo)用戶時(shí),Chrome就只能采用上面這行代碼才能發(fā)出注銷(xiāo)請(qǐng)求
針對(duì)IE的兼容代碼如下:
$.ajax({ url: logoutURL, crossDomain: true, async: false, dataType: "jsonp" });
crossDomain設(shè)置為true是為了解決跨域訪問(wèn)問(wèn)題,如果不存在這個(gè)問(wèn)題,這個(gè)屬性可以忽略。async屬性最好也設(shè)成false,true也可以。dataType:"jsonp"這個(gè)屬性也是為解決跨域訪問(wèn)問(wèn)題,和crossDomain配合使用,不存在跨域問(wèn)題,這兩個(gè)屬性可省略。
以上代碼在IE9、Chrome27、Firefox21測(cè)試通過(guò)。
以上就是小編為大家?guī)?lái)的淺談window.onbeforeunload() 事件調(diào)用ajax(標(biāo)題)全部?jī)?nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
jquery 正整數(shù)數(shù)字校驗(yàn)正則表達(dá)式
本文主要介紹了jquery正整數(shù)數(shù)字校驗(yàn)正則表達(dá)式的方法。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01jQuery插件HighCharts繪制2D帶Label的折線圖效果示例【附demo源碼下載】
這篇文章主要介紹了jQuery插件HighCharts繪制2D帶Label的折線圖效果,結(jié)合實(shí)例形式分析了jQuery圖形繪制插件HighCharts實(shí)現(xiàn)折線圖效果的具體操作步驟與相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03jQuery實(shí)現(xiàn)簡(jiǎn)單的輪播圖
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11jQueryMobile之Helloworld與頁(yè)面切換的方法
這篇文章主要介紹了jQueryMobile之Helloworld與頁(yè)面切換的方法,實(shí)例分析了jQueryMobile的基礎(chǔ)用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02jquery實(shí)現(xiàn)放大鏡簡(jiǎn)潔代碼(推薦)
這篇文章主要介紹了jquery實(shí)現(xiàn)放大鏡簡(jiǎn)潔代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06jquery validation插件表單驗(yàn)證的一個(gè)例子
jquery.validate.js validation表單的驗(yàn)證插件2010-03-03