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

经常有这样的需求,就是在离开某个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(标题)全部内容了,希望大家多多支持~

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ajax
onbeforeunload
onbeforeunload ajax、ajax window.open拦截、ajax window.open、ajax window.location、window.onload ajax,以便于您获取更多的相关知识。

时间: 2025-01-01 23:23:39

浅谈window.onbeforeunload() 事件调用ajax_jquery的相关文章

window.onbeforeunload() 事件调用ajax的解决方法

1 function window.onbeforeunload() { 2 3 var jhid = $("#ctl00_ContentBody_hfGuid").val(); 4 $.ajax({ 5 url: "AjaxServices/AjaxService.asmx/DeleteDeviceAndWorkContent", // ajax 调用后台方法 6 type: "POST", 7 async: false, 8 data: &q

浅谈js键盘事件全面控制_javascript技巧

主要分四个部分 第一部分:浏览器的按键事件 第二部分:兼容浏览器 第三部分:代码实现和优化 第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown. onkeypress和onkeyup这三个事件句柄.一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时候的keyup. 在这3种事件类型中,keydown和keyup比较底层,而keypr

浅谈jQuery双事件多重加载的问题_jquery

如下所示: <html> <a href="1**.html"> <button onclick="buttonEvent()">点击事件</button> </a> </html> function buttonEvent(){ location.href = "2**.html"; } 如代码显示那样,当点击button按钮的时候想跳转到2**.html页面.但是,这个最

浅谈jQuery绑定事件会叠加的解决方法和心得总结_jquery

关于jQuery的学习中我忽略了一个取消绑定事件.unbind()的使用,也不知道绑定事件会累加的情况,结果因为这个原因,让我在项目上栽了坑.只能说自己还太年轻,需要学习掌握的知识还有很多. 我遇到的问题 我在项目中遇到的状况,一个评价页面,简单的来说就是左右两个表格,ajax分别动态加载学生姓名学号信息和不同科目对学生评价内容两部分,两边表格我都每行写了checkbox并对table tbody tr绑定click事件执行行选功能,起初我写的是静态页面html,行选功能完全没有问题,后来换成j

window.onbeforeunload事件里不能写ajax吧?(只有3分,谢谢)

问题描述 我想在关闭页面前ajax调用保存一些东西到数据库,但是好像onbeforeunload事件里根本不能调用ajax哟,tomcat会报IO异常:Exception filling buffer with data from underlying input stream: not an EAGAIN status, so perhaps disconnected client?,,,怎么样实现我的目的呢? 问题补充:用户使用完毕页面想收集点信息,如评价```` 解决方案 试试:使用aja

浅谈JavaScript之事件绑定

关于 JavaScript 的事件绑定在网上已经有不少相关的资料了,今天这篇文章也是在被同事问及的时候才顺便把它记录下来,算是 JavaScript 事件绑定中的一个小技巧,如果能在工作中善加利用,会有出其不意的效果   其实没有什么新的知识点,只是为了方便其他有需要的朋友们翻阅,对自己而言也算是一个积累,所以只能算是闲谈 JavaScript,老鸟们可以尽情飘过. 在进入正题之前,先提个问题热热身吧.现在有如下 HTML 结构: 复制代码 代码如下: <div id="wrap"

浅谈JavaScript的事件_javascript技巧

1.事件流     事件流描述的是从页面中接收事件的顺序.但是IE提出的是冒泡流,而Netscape Communicator提出的是捕获流. JavaScript事件流 2.事件冒泡(event bubbling)     事件开始由最具体的元素(嵌套层次最深的那个节点)接收,然后逐级向上传播为较不为具体的节点(文档).如下: 复制代码 代码如下: <html>     <head>         <title>事件冒泡</title>     <

浅谈JavaScript之事件绑定_javascript技巧

其实没有什么新的知识点,只是为了方便其他有需要的朋友们翻阅,对自己而言也算是一个积累,所以只能算是闲谈 JavaScript,老鸟们可以尽情飘过.在进入正题之前,先提个问题热热身吧.现在有如下 HTML 结构: 复制代码 代码如下: <div id="wrap"> <input type="button" value="按钮一" /> <input type="button" value=&quo

浅谈C#的窗体调用

本文主要介绍C#窗体里调用,包括介绍在窗体里放置两个命令按钮等方面. 有了压缩和解压缩的类以后,就要在C#窗体里调用了.怎么?是新手,不会调用?ok,接着往下看如何在C#窗体里调用.首先在窗体里放置两个命令按钮(不要告诉我你不会放啊~). 编写以下源码: /// <summary> /// 调用源码 /// </summary> private void button2_Click_1(object sender, System.EventArgs e) { string []Fi