当有人离开特定页面时,将信息发送到服务器

时间:2013-09-13 08:41:38

标签: javascript php

我正在编写多个消息的翻译系统。

我有一个页面,其中列出了所有需要翻译的消息。当翻译人员单击要翻译的消息时,我将其锁定,因为无法为其分配其他翻译器。

问题出现在翻译人员进入并改为写东西时,以非常规方式离开页面,如后退按钮或关闭浏览器。

如果发生这种情况,我想解锁消息,使其再次可供其他翻译使用。

我该如何达到这种行为?

我知道javascript onbeforeunload事件,但每次用户刷新页面时都会触发,这不是我想要的。

事先提前

编辑: 似乎实现了一个js ajax调用来通知每一分钟服务器是要走的路。现在的问题是如何处理PHP服务器端?

2 个答案:

答案 0 :(得分:0)

使用onbeforunload并询问此人是否真的想要使用未保存的更改离开页面有什么问题?

我会在提供手动保存按钮的同时使用上述方法。 此外,锁定超时会有所帮助,因此如果该人员没有编辑该字段几分钟,它将被解锁并通过JS AJAX调用通知该人员。

编辑:要实现AJAX计时器,我会执行以下操作:

  • 将上次访问时间保存到数据库或PHP端文件中的翻译项目
  • 每30秒一次,对验证上次访问时间的PHP脚本执行AJAX call
  • 根据结果,从PHP脚本返回一个“OK”或“TIMEOUT”消息到JavaScript部分,然后它将不执行任何操作(确定)或停用转换并通知转换有关超时的信息

答案 1 :(得分:0)

您可以使用WebSockets,但在我看来,它是一种不成熟的技术,而且远离防火墙友好。 1 因此,您可以使用HTTP轮询。使用JavaScript不时向服务器发出HTTP请求,因此它将向服务器显示客户端仍在页面中。时间将取决于连接,用户数量等,但将其置于保持活动过期之前是一个好主意,因为TCP / IP连接仍处于打开状态。

如果用户离开页面,则轮询将不会执行,并且在没有收到x秒的HTTP请求加一段时间后,服务器可以假定用户不在页面上。


1 - 它的防火墙对WebSockets不友好,这可能会随着时间的推移而改变