浅谈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 变量作用域 两个可能会被忽略的小特性
Mar 23 Javascript
jQuery源码中的chunker 正则过滤符分析
Jul 31 Javascript
纯css+js写的一个简单的tab标签页带样式
Jan 28 Javascript
javascript生成json数据简单示例分享
Feb 14 Javascript
简单实现bootstrap导航效果
Feb 07 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
EasyUI Tree树组件无限循环的解决方法
Sep 27 Javascript
react 实现页面代码分割、按需加载的方法
Apr 03 Javascript
在vue中多次调用同一个定义全局变量的实例
Sep 25 Javascript
基于jquery实现九宫格拼图小游戏
Nov 30 jQuery
使用React-Router实现前端路由鉴权的示例代码
Jul 26 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 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
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
Display SQL Server Version Information
2007/06/21 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
python实现经典排序算法的示例代码
2021/02/07 Python
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
2014全国两会心得体会
2014/03/17 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
食品安全主题班会
2015/08/13 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python