可能是,一旦浏览器被重定向到另一个URL,Chrome就会取消待处理的Ajax请求吗?

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函数中,它将等待回复.

Gri*_*... 7

一个非常糟糕的方法是添加:async: false,这将锁定浏览器直到AJAX调用完成.当然,如果出现问题并且AJAX调用永远不会完成......

这是解决问题的最快捷,最简单的解决方案,但可能不是最好的解决方案.

我个人来说,锁只会持续20秒(使用数据库中的时间戳),并且每隔十秒发送一次ajax调用以重新锁定页面(如果有意义)使用setInterval().这样,在有人离开页面几秒钟后锁就会自行解除,并且无论情况如何都是好的(例如,客户端的电源故障不会使页面永久锁定).