我有这个功能来解锁用户当前正在编辑的列表:
function unsetLock(id) {
$.ajax({
type: "POST",
url: "/ajax.php?action=unsetLock",
dataType: 'json',
data: "id="+ id
});
return true;
}
当用户离开列表时,我必须取消锁定:
unsetLock(lockID);
document.location.href='/page/to/navigate/back/to.php';
然而,这种解锁有时有效,有时无效。我认为这是因为 document.location.href
在 ajax 调用实际发送到服务器之前执行。
如何在将用户导航到下一页之前强制发送解锁信息?
实际上我不需要等待 Ajax-Reply,因为我想重定向用户,无论它是否成功。我只是想确定一下,它正在传输到服务器。
如果我将 document.location.href
放在 Ajax 函数中,它将等待回复。
最佳答案
一个非常不礼貌的方法是添加:async: false
,这将锁定浏览器直到 AJAX 调用完成。
当然,如果出现问题并且 AJAX 调用从未完成...
这是解决您问题的最快、最简单的方法,但可能不是最好的。
就我个人而言,锁定只会持续 20 秒(使用数据库中的时间戳),并使用 setInterval 每 10 秒发送一次 ajax 调用以重新锁定页面(如果有意义的话) ()
。
这样锁会在有人离开页面几秒钟后自行解除设置,并且无论在什么情况下都是好的(例如,客户端电源故障不会使页面永远锁定)。
关于javascript - 一旦浏览器被重定向到另一个 URL,Chrome 是否会取消待处理的 Ajax 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9361652/