gpt4 book ai didi

javascript - 在编辑时实现锁定和解锁文档

转载 作者:行者123 更新时间:2023-11-29 22:29:54 26 4
gpt4 key购买 nike

情况是这样的:

我有一个基于 Web 的票务应用程序,多个用户。

可能会出现的一个问题(在我要替换的旧版本中确实会出现)是用户 1 打开了一个工单,对其进行了编辑,然后进行了保存。但是当他编辑它时,用户 2 也打开并保存了勾选。 user2 所做的更改将被 user1 丢失/覆盖。

为了防止这种情况,我实现了一个锁定机制,它非常简单:

  1. 打开工单时,PHP 脚本会检查现有锁。
  2. 如果没有找到,它会锁定并打开文档。
  3. 在 JS 中,setTimeout() 和 XmlHttpRequest 调用会在 10 分钟后解锁票证(没有问题)。
  4. 我还设置了一个 unload 事件以在关闭/离开窗口/标签时解锁票证

问题出在第 4 步:unload 事件(& 它的 friend beforeunload)工作得不够好,无法可靠地(要使此功能具有任何重要意义,它需要可靠),许多浏览器并不总是在我希望它被触发时触发它(例如按后退按钮、按 F5、关闭选项卡等。这各不相同每个浏览器)

我能想出的唯一替代方法是使用 setTimeout()XmlHttpRequest() 调用 php 脚本来告诉它页面仍然打开。如果这个“心跳”监视器失败,我们假设用户离开了工单并解锁了文档。

这对我来说似乎非常低效,并且很快会导致对服务器的许多请求,甚至只有几个用户。

有人知道如何处理这个问题吗?

它需要在 IE8+ 和其他现代浏览器(最好是 Firefox、Webkit、Opera)中工作。我不关心 IE6/IE7,我们的组织不使用它们)。

最佳答案

通过 XHR 使用心跳 ping 是可行的方法。根据用例,您可能还希望在用户停止在字段中输入而不是每隔 x 秒后发送它们 - 这将确保页面保持打开状态但不活动不会使其保持锁定状态。

如果您在用户停止输入后发送这些 XHR,请使用 keydown/up/press 事件之一和 debounce/throttle仅当用户停止输入时才发送请求的脚本,例如5 秒,每 x 秒 1 秒(以防用户长时间打字)。

关于javascript - 在编辑时实现锁定和解锁文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7529190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com