【发布时间】:2013-05-21 11:03:19
【问题描述】:
我有一个网络服务器,可以为特定学科的学生生成问题。网络服务器需要跟踪每个学生在一组特定问题上花费了多少时间。
网页有一个“完成”按钮,当按下该按钮时,会将统计信息发送到服务器。
但是,如果学生离开页面或关闭浏览器窗口而不按“完成”,我也希望网络浏览器发送统计信息。
为此,我计划让“onunload”或“onbeforeunload”向服务器发送一个带有相关信息的Ajax 请求。但显然不同的浏览器并不完全支持这些事件,而且在事件处理程序中可以做的事情也有限制。当然,如果与服务器的通信失败,我不希望浏览器冻结。
所以,我需要一些关于最佳方式的建议。
【问题讨论】:
-
出于这个原因,我使用onbeforeunload 来发送AJAX 请求,并且在主流浏览器中都可以使用。我不能给你一个我测试过的明确清单,但你应该知道它以前做过。
-
我用过的软件,回想起来可能有这个功能。我记得对可以使用的浏览器有限制。这是不诚实的,但我倾向于使用基本上说的话。 "需要符合标准的浏览器。您必须使用 xx、yy 或 zz 浏览器才能完成此测试。其他浏览器无法保证您答案的隐私,因此不支持"
-
你不能实现浏览器不支持的东西(卸载时的 AJAX)。与其在卸载时发送数据,不如定期向服务器发送数据。然后,即使使用任务管理器关闭浏览器,或者如果他拔下(网络)电缆,您仍然有一些数据。
-
@RichieHindle:在
onbeforeunload上执行 AJAX(或者更确切地说是“SJAX”,因为您只能执行同步请求)不是一个好主意,如果浏览器可能有一点延迟只需忽略该功能,因为这将冻结 UI,直到网站完成对用户不太友好的请求的处理。
标签: javascript ajax onbeforeunload onunload