javascript - 在离开当前页面的浏览器上触发数据库调用?

标签 javascript jquery jsf

我有一个应用程序,我打算在我的数据库中设置一个锁定标志,如果设置该标志,其他人将无法查看同一页面。

但是,一旦设置 - 我不知道如何“取消设置”它。我可以让用户取消设置标志,但这似乎没有必要。

我只想让浏览器离开页面,调用数据库,然后解锁页面。

如何使用 JSF/Javascript/jQuery(所有选项)做这种“类型”(而不是寻找确切的方式)

最佳答案

确实没有可靠的方法来做到这一点,反正我见过。

您可以使用浏览器的 onbeforeunload 事件告诉服务器,“嘿,我现在要离开页面了。”。问题是您实际上无法阻止 页面卸载。如果用户实际上正在关闭浏览器,则任何打开的套接字都将立即关闭。您的 Web 服务器可能会或可能不会及时收到请求。我用这种方法得到了非常不稳定的结果。

一种可能有效的方法是采用某种超时 机制。该页面每隔 30 秒或每隔 30 秒就会对服务器执行一次 ping 操作,说“我还在这里”。如果服务器在几分钟后没有收到此更新,它将使 session 无效并释放该文档。也许这可以通过检查新用户出现时的最后一次 ping 来优化。一个问题是,如果有人离开了页面,下一个用户可能需要等待一两分钟才能进入该页面。然后,您必须找到既不会让您的服务器充满流量又不会让下一个用户等待太久的 ping 频率。

也可以将这两种方法结合起来。当用户离开页面时,捕获onbeforeunload事件并立即使 session 失效。但是,如果它不起作用, session 将在一分钟未被 ping 后超时。

有更好的解决方案吗?

如果您确实需要锁定网络应用程序中的文档以防止多个用户对其进行编辑,您可能需要调查您的整体设计。你害怕用户破坏数据吗?如果是这样,也许可以采用一种可以解决合并冲突的机制,或者检测是否可以合并两组更改。

如果您想实现真正的 Web 2.0,您可以设计类似于 Google Docs 的东西,其中所做的更改会在更改时显示。任何地方都不需要保存按钮!

关于javascript - 在离开当前页面的浏览器上触发数据库调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17754926/

相关文章:

javascript - 需要 eval() 的替代方法以及替换字符串值的更好方法

javascript - ClickEvent上的JavaScript声音仅适用于Google Chrome

javascript - 宽度切换动画 - 毛刺效果

jsf - <h :selectOneRadio> renders table element, 如何避免这种情况?

ajax - JSF - 在 ajax 调用后加载/插入不同的 div

session - 在 JSF 中登录、注销和存储 session 属性的最佳方法

php - JSON 从 PHP 到 JavaScript

javascript - 使用 AJAX 从数据库获取 JSON 数据时遇到问题

javascript - 通过 AJAX 发送对象数组 - ASP.NET MVC

javascript - s在 wordpress 中提交 ajax 数据时没有任何反应