Joc*_*ung 9 javascript ajax jquery
我有这个功能来解锁用户当前正在编辑的列表:
function unsetLock(id) {
$.ajax({
type: "POST",
url: "/ajax.php?action=unsetLock",
dataType: 'json',
data: "id="+ id
});
return true;
}
Run Code Online (Sandbox Code Playgroud)
当用户离开列表时,我必须取消锁定:
unsetLock(lockID);
document.location.href='/page/to/navigate/back/to.php';
Run Code Online (Sandbox Code Playgroud)
然而,这种解锁有时是有效的,有时则不然.我认为这是因为document.location.href在ajax调用实际发送到服务器之前执行了.
在将用户导航到下一页之前,如何强制发送解锁?
实际上我不需要等待Ajax-Reply,因为我想重定向用户,无论是否成功.我只是想确定,它正被转移到服务器.
如果我将document.location.href内部放置在Ajax函数中,它将等待回复.
一个非常糟糕的方法是添加:async: false,这将锁定浏览器直到AJAX调用完成.当然,如果出现问题并且AJAX调用永远不会完成......
这是解决问题的最快捷,最简单的解决方案,但可能不是最好的解决方案.
我个人来说,锁只会持续20秒(使用数据库中的时间戳),并且每隔十秒发送一次ajax调用以重新锁定页面(如果有意义)使用setInterval().这样,在有人离开页面几秒钟后锁就会自行解除,并且无论情况如何都是好的(例如,客户端的电源故障不会使页面永久锁定).
| 归档时间: |
|
| 查看次数: |
4233 次 |
| 最近记录: |