Javascript 在离开当前页面的浏览器上触发DB调用?

Javascript 在离开当前页面的浏览器上触发DB调用?,javascript,jquery,jsf,Javascript,Jquery,Jsf,我有一个应用程序,我打算在我的数据库中设置一个锁标志,如果设置了锁标志,其他人将无法查看同一页面 然而,一旦设置-我不知道如何“取消”它。我可以补偿用户取消设置标志,但这似乎没有必要 我只希望浏览器离开页面,调用数据库,然后解锁页面 如何使用JSF/Javascript/jQuery(所有选项)实现这种“类型”(不寻找确切的方式)发送“保持活动状态信号”可能是一个选项。在前端有这样的东西,结合会话cookie setInterval(function() { var img = new Im

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

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

我只希望浏览器离开页面,调用数据库,然后解锁页面

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

发送“保持活动状态信号”可能是一个选项。在前端有这样的东西,结合会话cookie

setInterval(function() {
  var img = new Image();
  var src = "http://examle.com/keepalive.gif?cachebuster=" + 
      Math.ceil(Math.random() * 10000 );
}, 1000);

无论如何,我都没有见过一种可靠的方法来做这件事

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

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

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

有更好的解决方案吗?

如果您确实需要在web应用程序中锁定一个文档,以便多个用户无法编辑它,您可能需要调查您的总体设计。你害怕用户破坏数据吗?如果是这样,可以使用一种机制来解决合并冲突,或者检测两组更改是否可以合并


如果你想真正实现Web2.0,你可以设计一些类似于谷歌文档的东西,在谷歌文档中,更改是实时的。任何地方都不需要保存按钮

这是因为你不想让人们互相覆盖吗?更可靠的解决方案可能是在数据库中有一个“last updated”字段,并将其与数据一起传递给客户机。当用户保存时,如果“上次更新”比检索数据时更新,则通知用户其他人已进行了更改。也许你可以选择覆盖。超时解决方案就是我们要走的路线。谢谢你的回答