关闭浏览器窗口后是否有可能发送 AJAX 请求?

6
有没有可能在关闭浏览器窗口后发送AJAX请求?
我有一个使用JavaScript(jQuery)实现运动的浏览器游戏,如果在每次运动后都发送Ajax请求,会给服务器带来很大负担。因此,我想在用户关闭窗口(或书签)时发送一个AJAX请求。它必须在所有现代浏览器中都能正常工作。
谢谢回答。
5个回答

5
我建议您在服务器上设置一个定时器,使服务器始终了解客户端的状态,以免服务器落后太多(例如每当客户端活动时,每60秒更新一次),在客户端不活动时停止服务器更新。
然后,在您的用户界面中,放置一些明显的用户界面元素,如关闭或停止按钮,鼓励用户通过这种方式关闭,并在点击任何一个按钮时更新服务器。
然后,您还可以挂钩页面的unload事件,然后发送最后一个ajax调用。但是,并非所有情况都会调用此事件,也不是所有浏览器都支持此事件,因此这将作为前两种技术的补充。

好的,谢谢。我将每60秒保存一次游戏(例如),然后再添加一个按钮来保存游戏。在某些重要事件(例如战斗)中,我将立即发送AJAX。 - Darkry

1

我认为没有实际的方法来做到这一点...但是肯定有解决您问题的方案。

您可以在某个时间间隔或游戏到达特定阶段时发送请求。

由于我们没有看到完整的情景,请再评估一下,以便我或其他人可以提供帮助。

如果可能的话..我会添加一个“保存状态”或只是“保存”按钮。这样用户就知道如果他不点击“保存”,什么都不会被“保存”。


1
你可以尝试使用 window.onbeforeunload,例如:
function saveGame(e) {
     if (!e) e = window.event;

    //Ajax here
}
window.onbeforeunload = saveGame;

这在所有现代浏览器中都有效吗?因为window.onunload不行。 - Darkry
据我所知,是的。我在一个小部件订购系统中使用了它,在关闭选项卡/窗口之前发出警报。没有跨浏览器问题。请参见此链接:https://dev59.com/5nVC5IYBdhLWcg3w4VNy - Marc Uberstein

0
我可以建议这样做:
  1. 调用 window.onunload(注意 Firefox!)并将当前位置存储在服务器中。重要提示:进行异步调用。
  2. 在服务器上保存用户状态(离开页面)
  3. 编写全局请求事件处理程序中的代码并查询此状态。
  4. 您可以在服务器上启动线程以调用最终卸载(例如,在 5 秒后),而不是来自客户端的新请求

我知道这些步骤很难实现,但它们解决了您的问题。


0

在关闭浏览器窗口后,您无法发送任何ajax请求。但是,当用户单击窗口的关闭按钮时,您可以使用onUnload事件来发送ajax请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接