浅谈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 相关文章推荐
File文件控件,选中文件(图片,flash,视频)即立即预览显示
Apr 09 Javascript
jquery获取input表单值的代码
Apr 19 Javascript
Grid得到选择行数据的方法总结
Jan 17 Javascript
javascript 函数声明与函数表达式的区别介绍
Oct 05 Javascript
js解决弹窗问题实现班级跳转DIV示例
Jan 06 Javascript
使用VS开发 Node.js指南
Jan 06 Javascript
js使用DOM操作实现简单留言板的方法
Apr 10 Javascript
初步使用Node连接Mysql数据库
Mar 03 Javascript
JS与jQuery实现隔行变色的方法
Sep 09 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
JS实现数组深拷贝的方法分析
Mar 06 Javascript
JS实现多选框的操作
Jun 24 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命令行用法入门实例教程
2014/10/27 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
js sort 二维数组排序的用法小结
2014/01/24 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
浅析vue深复制
2018/01/29 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
Python 合并拼接字符串的方法
2020/07/28 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
工作违纪检讨书
2014/02/17 职场文书
班长演讲稿范文
2014/04/24 职场文书
药剂专业求职信
2014/06/20 职场文书
新闻稿格式范文
2015/07/18 职场文书
新党员入党决心书
2015/09/22 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
合同范本之电脑出租
2019/08/13 职场文书