首页 新闻 会员 周边 捐助

一个关于页面页面关闭执行代码的问题

0
悬赏园豆:5 [已解决问题] 解决于 2013-01-08 23:24

如题。

我想要页面关闭后执行一个ajax,使用过window.onunload()但好像没有执行呢。请教了

问题补充:

需要在谷歌下实现这样的功能

动感超人z的主页 动感超人z | 初学一级 | 园豆:1
提问于:2013-01-08 13:25
< >
分享
最佳答案
0

楼主必须要这样吗?

可以谈谈你的需求?

这样,页面关闭要执行的代码,能不做,就不做。

收获园豆:3
chenping2008 | 大侠五级 |园豆:9836 | 2013-01-08 13:35

打算在页面关闭时更改用户的登录状态

动感超人z | 园豆:1 (初学一级) | 2013-01-08 13:50

类似与聊天室那样

动感超人z | 园豆:1 (初学一级) | 2013-01-08 13:57

@枼秋: 关于聊天室,可以用flash socket来实时的显示用户是否在线(个人的想法),当然你的现在的肯定不是聊天室。

个人的想法是:

你可以写个全局的js ajax方法,让每个页面都可以用到这个js,(这个很简单)

这个ajax的方法就是 定时的发送一个请求到服务器端,告知这个用户还在活跃的状态,(就是最简单的我们打开着这个页面,一动也不动 ,也算是这个人还在线)。  

后台可以有一个字段来,或者是记录还会记录这个人最近在线的时间。

这个时候有个问题,就是用户关闭了游览器,此时就没有定时的ajax请求到服务器了,也就是用户离线了,但是,也就是那个online字段不能有1->0  

你可以在服务器端写个定时的services来定时的扫描用户,假定一个过期的时间,比如10分钟还没有动,就认为这个用户已经离开。

chenping2008 | 园豆:9836 (大侠五级) | 2013-01-08 14:15

@chenping2008: 好想法,我试试

动感超人z | 园豆:1 (初学一级) | 2013-01-08 14:20

@chenping2008: 这里有个小问题哦,就是服务器端的定时扫描应该怎么做?

动感超人z | 园豆:1 (初学一级) | 2013-01-08 14:45
chenping2008 | 园豆:9836 (大侠五级) | 2013-01-08 14:59
其他回答(3)
0
Cool咔咔 | 园豆:204 (菜鸟二级) | 2013-01-08 13:26

我照着试了一下IE下确实可以,要命的是我需要用谷歌游览器- -

支持(0) 反对(0) 动感超人z | 园豆:1 (初学一级) | 2013-01-08 14:07
0

window.onbeforeunload = function () {
            if (event.clientY < 0 || event.altKey) {
                //ajax代码
            }
        }

Rich.T | 园豆:3440 (老鸟四级) | 2013-01-08 13:41
window.onbeforeunload = function () {
            if (event.clientY < 0 || event.altKey) {
                    $.ajax({
            url:"<%:Url.Action("OutLogin","Home") %>"
            }) 
            }
        }

我有试过这样但是不好使,我用的谷歌游览器

支持(0) 反对(0) 动感超人z | 园豆:1 (初学一级) | 2013-01-08 13:56

@枼秋: 

如果你不涉及到刷新操作的话,这样可以

window.onbeforeunload = function () {
            //ajax
        }

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2013-01-08 14:11
0

你的需求“打算在页面关闭时更改用户的登录状态”……

非法关闭窗体一些js事件是不能获取到的,能不能在后台做呢?Session_start与Session_end事件

参考:http://hi.baidu.com/yyq745201/item/62e26b189f30f712e2f98626

收获园豆:2
滴答的雨 | 园豆:3660 (老鸟四级) | 2013-01-08 14:02

会话开始和会话结束是怎么实现执行代码的?web.config中的配置那一部分没看明白

支持(0) 反对(0) 动感超人z | 园豆:1 (初学一级) | 2013-01-08 14:17

@枼秋: 

web.config只需要清楚这一处
<system.web>
    <sessionState mode ="InProc" timeout ="20" />
</system.web>

1、只有在 Web.config 文件中的 sessionstate 模式设置为InProc 时,才会引发 Session_End 事件。
2、timeout 标识若20分钟还没有进行客户端到服务器的通信,就视为已关闭,即触发Session_End 事件。

Session_start  是当你第一次访问一个网页时发生,创建的专属会话

Session_end 是会话结束时触发。主动调用Session.Abandon();或会话超时时执行

事件执行更详细请看:http://hi.baidu.com/5264270/item/dd925b0bc9f59eea3599021e

支持(0) 反对(0) 滴答的雨 | 园豆:3660 (老鸟四级) | 2013-01-08 14:26

这个办法可行

支持(0) 反对(0) 动感超人z | 园豆:1 (初学一级) | 2013-01-08 23:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册