我有一个系统,当用户查看该项目时,项目被锁定(在数据库中有一个标志)。
目前,只有当用户执行某项操作时才会解锁该项目。
但是,当用户通过任何方法离开页面时,我想调用一个解锁项目的webservice / ashx页面,但不会阻止页面更改。
答案 0 :(得分:2)
你所描述的是不可能的。 JavaScript线程/运行时存在于加载页面的范围内,因此当页面卸载时,JavaScript也会被卸载。当异步调用返回并且浏览器离开页面时,用户将收到JS错误。
您可以使您的Web服务/ AJAX调用同步并阻塞,直到服务器返回响应,但这当然意味着页面将在卸载之前等待响应。
答案 1 :(得分:2)
使用“心跳”功能在页面加载时保持锁定活动怎么样?每隔一段时间拨打一次服务器电话,比方说15秒左右,以更新锁定。编写服务器端代码,以便锁定在20秒后超时,如果它没有从页面听到“心跳”。当用户离开页面时,心跳将停止,锁定将在最多20秒后释放。
答案 2 :(得分:1)
我设法通过使用body onbeforeunload事件在IE7和Firefox 3中使用它。我使用XmlHttpHandler调用一个解锁查询的asp.net http处理程序。我必须将状态更改事件处理程序设置为null,以便返回时没有javascript错误。
事件触发并且页面发生变化,而不是延迟用户。
答案 3 :(得分:0)
我认为您应该能够对服务器进行同步XHR调用。
如果你正在使用jQuery:
$.ajax({
async:false,
url:"your_page.html",
data:"unlock=true",
type:"POST"
}).responseText;
因为它不是异步的,理论上它应该暂停浏览器执行,直到返回此调用的结果。
答案 4 :(得分:0)
这可以使用 Beacon API 解决。
更多相关信息here