Javascript 当有人离开特定页面时向服务器发送信息

Javascript 当有人离开特定页面时向服务器发送信息,javascript,php,Javascript,Php,我正在为多条信息编写翻译系统 我有一个页面,其中有一个表格,列出了所有需要翻译的消息。当翻译人员单击消息进行翻译时,我将其锁定,因为无法为其分配其他翻译人员 当翻译人员进入而不是写东西时,问题就出现了,翻译人员以一种非常规的方式离开页面,比如后退按钮或关闭浏览器 如果发生这种情况,我想解锁的消息,使它再次提供给其他翻译人员 我如何达到这种行为 我知道javascript onbeforeunload事件,但每次用户刷新页面时都会触发,这不是我想要的 提前付款 编辑: 实现js ajax调用以每分

我正在为多条信息编写翻译系统

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

当翻译人员进入而不是写东西时,问题就出现了,翻译人员以一种非常规的方式离开页面,比如后退按钮或关闭浏览器

如果发生这种情况,我想解锁的消息,使它再次提供给其他翻译人员

我如何达到这种行为

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

提前付款

编辑:
实现js ajax调用以每分钟通知服务器似乎是一个不错的选择。现在的问题是如何处理PHP服务器端?

使用onbeforunload并询问用户是否真的想在页面上留下未保存的更改,这有什么不对

我会使用上面提到的方法来验证手动保存按钮。 此外,锁定超时也会有所帮助,因此,如果此人有几分钟没有编辑该字段,则该字段将被解锁,并通过JS AJAX调用通知此人

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

  • 在数据库或PHP端的文件中保存对翻译项的上次访问时间
  • 每30秒对PHP脚本执行一次测试,以验证上次访问时间
  • 根据结果,从PHP脚本向JavaScript部分返回一条“OK”或“TIMEOUT”消息,然后JavaScript部分将不执行任何操作(OK)或停用翻译并通知翻译超时

您可以使用WebSocket,但在我看来,这是一项不成熟的技术,仍然离防火墙友好相去甚远。1 因此,您可以使用HTTP轮询。使用JavaScript不时向服务器发出HTTP请求,以便向服务器显示客户端仍在页面中。时间将取决于连接、用户数量等,但最好在保持活动到期之前将其放置,因为TCP/IP连接仍然打开

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



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

lol,谢谢@diegocnascemento:)。。。另外,我开始的时候只是一个评论,但我意识到它太大了:PTy,如果你看一下我和@Diego之间的对话,你会发现我需要用PHP实现一个计时器,但我认为这是不可能的w,这个对话看起来太复杂了!我正在用一种方式更新我的答案,我可以绕过时间…@ZathrusWriter如果用户关闭页面,它想知道什么,脚本将不会被调用,也不会发生“超时”。它应该在服务器端使用一些计时器。当用户关闭浏览器时,一旦另一个用户打开相同的翻译,就会出现超时-基本上是检查旧的超时,如果发生超时,则解除锁定,并为刚刚访问它的新用户创建新锁。这可以使用ajax调用每隔30秒左右访问一次,但当这停止时,我如何在服务器端捕获它?@Fed03好吧,首先ajax只是一个定义一些策略的术语,如果您愿意,我说的是ajax,我只是不喜欢这个词。您需要说明您使用的服务器端技术,以便我们提供帮助。无论如何,您需要的是实现一个超时,该超时将在收到请求时被清除,如果不是,您将执行一些操作,在这种情况下解锁翻译器。将此应用于服务器端。我使用的是PHP,而您所说的ajax是对的。。。你更喜欢使用什么?我不是PHP用户,所以你可以搜索如何在PHP中实现计时器,或者只是询问它是否还没有被询问。不,对于HTTP轮询:)