浅谈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 相关文章推荐
可编辑下拉框的2种实现方式
Jun 13 Javascript
JavaScript控制按钮可用或不可用的方法
Apr 03 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
Jun 08 Javascript
分享两款带遮罩的jQuery弹出框
Dec 30 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
Jul 25 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
Jul 10 Javascript
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
vue教程之toast弹框全局调用示例详解
Aug 24 Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
vue+swiper实现左右滑动的测试题功能
Oct 30 Javascript
详解Vue中的watch和computed
Nov 09 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP生成月历代码
2007/06/14 PHP
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
python实现简单ftp客户端的方法
2015/06/28 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
python实现图像识别功能
2018/01/29 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
python实现密码强度校验
2020/03/18 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
乡镇交通安全实施方案
2014/03/29 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android