浅谈window.onbeforeunload() 事件调用ajax


Posted in Javascript onJune 29, 2016

经常有这样的需求,就是在离开某个web页面时,用户不一定点注销,这样会导致会话不能及时销毁。为实现用户离开页面时,自动注销功能,需要在web页面的onbeforeunload事件处理函数中发送注销命令。这个地方大多用Ajax实现。有时还涉及到跨域访问的问题。这个地方就存在浏览器的兼容性问题。

浏览器在处理这个需求时的不兼容性有如下两点:

1、处理Ajax时的不兼容性,这里使用jQuery来解决。

2、在发送Ajax请求时的不兼容性

主要代码如下:

function logout() { 
        var logoutURL = "xxxx"; //用于注销用户的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(); 
      };

代码说明:

firefox在处理js时的安全级别较高,很多IE、Chrome中js可以使用的权限在Friefox中被限制,因此通过

if(userAgent.indexOf("msie")>-1) { //IE
          
        }else { //FireFox Chrome
          
        }

这段代码来判断当前浏览器类型。

针对Firefox、Chrome的兼容代码如下:

$.ajax({ url: logoutURL, async: false });

async需要设为false,即为同步,不能采用true异步的方式,否则请求有可能发不出去。其实Chrome也适用于下面针对IE的代码,在关掉浏览器时会自动发送注销命令,但是点浏览器的刷新按钮时也希望能自动注销用户时,Chrome就只能采用上面这行代码才能发出注销请求

针对IE的兼容代码如下:

$.ajax({ url: logoutURL, crossDomain: true, async: false, dataType: "jsonp" });

crossDomain设置为true是为了解决跨域访问问题,如果不存在这个问题,这个属性可以忽略。async属性最好也设成false,true也可以。dataType:"jsonp"这个属性也是为解决跨域访问问题,和crossDomain配合使用,不存在跨域问题,这两个属性可省略。

以上代码在IE9、Chrome27、Firefox21测试通过。

以上就是小编为大家带来的浅谈window.onbeforeunload() 事件调用ajax(标题)全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
javascript删除字符串最后一个字符
Jan 14 Javascript
jQuery 中国省市两级联动选择附图
May 14 Javascript
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
jquery编写Tab选项卡滚动导航切换特效
Jul 17 Javascript
多种方式实现js图片预览
Dec 12 Javascript
Angular.js中控制器之间的传值详解
Apr 24 Javascript
微信小程序自定义多选事件的实现代码
May 17 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
May 01 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 27 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
vue实现登录功能
Dec 31 Vue.js
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 #Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 #Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
Jun 28 #Javascript
jqGrid用法汇总(全经典)
Jun 28 #Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 #Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 #Javascript
浅谈js的url解析函数封装
Jun 28 #Javascript
You might like
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
joomla组件开发入门教程
2016/05/04 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
在Windows8上的搭建Python和Django环境
2014/07/03 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
详解Django CAS 解决方案
2019/10/30 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
第二课堂活动总结
2014/05/07 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
小学生春游活动方案
2014/08/20 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
2014年度思想工作总结
2014/11/27 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
学雷锋感言
2015/08/03 职场文书
2015年国庆节寄语
2015/08/17 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL