2

我有一个网络服务器,可以为特定学科的学生生成问题。Web 服务器需要跟踪每个学生在一组特定问题上花费的时间。

网页有一个“完成”按钮,当按下该按钮时,会将统计信息发送到服务器。

但是,如果学生离开页面或关闭浏览器窗口而不按“完成”,我也希望网络浏览器发送统计信息。

为此,我计划让“onunload”或“onbeforeunload”向服务器发送一个带有相关信息的Ajax 请求。但显然不同的浏览器并不完全支持这些事件,而且在事件处理程序中可以做的事情也有限制。而且,当然,如果与服务器的通信失败,我不希望浏览冻结。

所以,我需要一些关于最佳方式的建议。

4

2 回答 2

1

最好的实现方式是,使用周期更新。当用户以任何方式断开连接时,这几乎可以保证您拥有一些相关数据。

一个实现非常简单,你可能不得不重构一些逻辑来发送周期更新而不是一次发送所有内容。

function sendStatistics()
{
    // ajax and what not
}

setInterval(function(){
    sendStatistics();
}, 1000);

使其工作的另一种方法是在 beforeunload 中进行 ajax 调用并使其同步。这将在通话期间冻结浏览器,并且仅在导航或关闭浏览器时才有效,我不推荐这样做。

于 2013-05-24T06:42:44.203 回答
1

如果我想确保处理所有“特殊事件”,我会将勾选“请求”从网页发送到服务器。粒度取决于跟踪要求、负载以及是 Intranet 还是 Internet 应用程序;可以是几秒钟甚至一分钟。因此,即使浏览器/操作系统/网络崩溃,您也可以跟踪在页面上花费的时间。

于 2013-05-23T14:46:42.760 回答