我有一个网络服务器,可以为特定主题的学生生成问题。 Web服务器需要跟踪每个学生在特定问题集上花费的时间。
网页上有一个“完成”按钮,当按下该按钮时,会将统计信息发送到服务器。
但是,如果学生离开页面或关闭浏览器窗口而不按“已完成”,我也希望Web浏览器发送统计信息。
为此,我计划让“onunload”或“onbeforeunload”向服务器发送带有相关信息的Ajax请求。但显然不同的浏览器并不完全支持这些事件,并且对事件处理程序中可以执行的操作也有限制。当然,如果与服务器的通信失败,我不希望浏览器冻结。
所以,我需要一些关于最佳方法的建议。
答案 0 :(得分:1)
如果我想确保处理所有“特殊事件”,我会将“请求”从网页发送到服务器。粒度取决于跟踪要求,负载,以及它是内部网还是互联网应用程序;可能是几秒甚至一分钟。因此,即使浏览器/操作系统/网络崩溃,您也会跟踪在页面上花费的时间。
答案 1 :(得分:1)
实施的最佳方式是使用期间更新。当用户以任何方式断开连接时,这几乎可以保证您有一些相关数据。
实现非常简单,你可能不得不重构一些逻辑来发送期间更新,而不是一次发送所有内容。
function sendStatistics()
{
// ajax and what not
}
setInterval(function(){
sendStatistics();
}, 1000);
使其工作的另一种方法是在beforeunload中进行ajax调用并使其同步。这将在浏览期间冻结浏览器,并且仅在导航或关闭浏览器时起作用,我不建议这样做。