0

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

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

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

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

我怎样才能达到这种行为?

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

提前ty

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

4

2 回答 2

0

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

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

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

  • 在数据库或 PHP 端的文件中保存对翻译项目的最后访问时间
  • 每 30 秒一次,对 PHP 脚本执行AJAX 调用,以验证上次访问时间
  • 根据结果​​,从 PHP 脚本向 JavaScript 部分返回“OK”或“TIMEOUT”消息,然后该部分将不执行任何操作(表示 OK)或停用翻译并通知翻译超时
于 2013-09-13T08:52:57.260 回答
0

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

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


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

于 2013-09-13T09:11:52.007 回答