如何在用户关闭页面时调用服务器方法

时间:2011-01-04 13:57:45

标签: javascript asp.net ajax callback

我想在用户关闭页面后从服务器中删除临时文件(我假设默认情况下我没有在服务器上进行此回调),

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

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

提前致谢

3 个答案:

答案 0 :(得分:4)

您无法确切知道用​​户何时关闭该页面。

你可以实现的最好的就是使用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,后退,前进,点击链接,提交表单等...您可以改进代码以忽略点击页面中的内容等情况让我知道如果相关,我会用适当的代码进行编辑。

答案 1 :(得分:3)

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

或者,您可以使用AJAX进行轮询,并且只要您在某个时间内没有收到带有用户识别令牌的请求,请执行以下操作:轮询间隔,删除相关文件。

答案 2 :(得分:0)

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

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