浅谈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 相关文章推荐
js直接编辑当前cookie的脚本
Sep 14 Javascript
js 解决“options为空或不是对象”
Dec 22 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
Jun 27 Javascript
关于js datetime的那点事
Nov 15 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
js实时获取窗口大小变化的实例代码
Nov 18 Javascript
Bootstrap CSS组件之导航条(navbar)
Dec 17 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
Jun 26 jQuery
JavaScript this绑定过程深入详解
Dec 07 Javascript
vue生命周期的探索
Apr 03 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
Jun 19 Javascript
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
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Python 3.x 新特性及10大变化
2015/06/12 Python
Python自动扫雷实现方法
2015/07/25 Python
Python元字符的用法实例解析
2018/01/17 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
.NET面试问题集
2015/12/08 面试题
招商经理岗位职责
2013/11/16 职场文书
材料物理专业求职信
2014/09/01 职场文书
超市开店计划书
2014/09/15 职场文书
2015年计划生育责任书
2015/05/08 职场文书
天气温馨提示语
2015/07/14 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
Python Django项目和应用的创建详解
2021/11/27 Python
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL