【问题标题】:How can I call a server method when the user close the page用户关闭页面时如何调用服务器方法
【发布时间】:2011-01-04 13:57:44
【问题描述】:

我想在用户关闭页面后从服务器中删除一个临时文件(我假设服务器上默认没有这个回调),

当用户关闭页面时,我尝试使用(ICallbackEventHandler 实现)调用服务器端方法,但问题是在这种情况下(关闭页面)服务器端方法不会触发,它只会响应如果页面仍然打开。而且我不喜欢在服务器响应并发送回调用以手动关闭页面之前停止关闭页面。

如果我必须停止关闭页面,请帮助我以最好的方式。

提前致谢

【问题讨论】:

    标签: javascript asp.net ajax callback


    【解决方案1】:

    您无法真正知道用户何时关闭页面。

    你能做到的最好的方法是使用 JS onunload 事件并在那里发送 AJAX 请求:

    <body onunload="SendRequest();">
    

    还有 JavaScript:(jQuery 是最简单的方式)

    function SendRequest()
    {
        var sURL = "http://localhost/Log.aspx?action=unload&t=" + (new Date()).getTime();
        $.ajax({ url: sURL });
    }
    

    当用户离开页面时将触发此事件:F5、后退、前进、单击链接、提交表单等...您可以改进代码以忽略某些情况,例如单击页面中的某些内容让我知道如果相关,我将使用适当的代码进行编辑。

    【讨论】:

      【解决方案2】:

      我认为,在最近访问的基础上,在一段时间后(例如 24 小时)删除文件可能更为谨慎。也就是说,所有 24 小时内未被触及的文件都会被删除。

      或者,您可以使用 AJAX 进行轮询,一旦在某个时间阈值 > 轮询间隔内没有收到带有用户标识令牌的请求,就删除相关文件。

      【讨论】:

      • AJAX 轮询的好主意。 :)
      • 不知道你能否提供更多关于 Ajax 池的信息或链接,我在互联网上没有快速找到很多。
      • 真的没那么难;我想也许你在做任何你想做的事都在抢先一步。本质上,点击您的某个 Web URL,该 URL 转发到某种动作/控制器/框架类/方法,提取用户的身份验证令牌,并使用时间戳连续标记与该用户关联的文件,或者字面意思是 touch文件。让另一个服务在某个计时器上运行(时间间隔取决于您的需要),并清除一段时间内未触及的所有文件。
      【解决方案3】:

      在我第一份工作的类似情况下,我将副本留在了服务器上,每当从该页面再次调用该临时目录时,我都会删除所有超过 72 小时的文件。不是很好,但在那种情况下被接受了。

      如果您知道用户不再需要它时需要在服务器上删除它,您可以使用会话侦听器,请参阅this question

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-05
        • 2012-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 1970-01-01
        相关资源
        最近更新 更多