javascript - 一旦浏览器被重定向到另一个 URL,Chrome 是否会取消待处理的 Ajax 请求?

标签 javascript jquery ajax

我有这个功能来解锁用户当前正在编辑的列表:

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/

相关文章:

Javascript从另一个网站的源代码中查找html元素的问题

java - ajax请求后渲染页面

javascript - 如何从脚本在 firefox/chrome 中运行 javascript 片段

javascript - 如何在创建时在具有特定类的所有元素上实例化 JS 小部件

javascript - 具有动态输入字段的动态表中的复选框

javascript - 无法获得 css 属性

javascript - jQuery鼠标滚动脚本速度不会改变

javascript - 使用 React 突出显示列表中的项目时的性能

javascript - 如何在 javascript 实时模板中自动建议类/函数名称?

javascript - 我如何知道用户滑动的方向?