javascript - 无法使用 "window.onbeforeunload"更改网页位置

标签 javascript jquery html

谁能告诉我,当用户执行以下操作时,我如何发出 AJAX 请求并将用户发送到其他页面?

  1. 点击浏览器的 next, prev btns。
  2. 以任何方式刷新页面(f5、ctrl+r、刷新 btn)。
  3. 尝试关闭浏览器的窗口(这里我不想重定向他,只是AJAX请求)。

我认为 window.onbeforeunload 可以做到,

  window.onbeforeunload = function () {
    makeAjaxCall();
    ------
    ------
  }

 // Ajax Call is successful
  function makeAjaxCall_SuccessHandler() {
    window.location.href = 'Home.html';
 }

但它根本不起作用....... 在搜索这个主题后,我发现这是一种为了浏览器安全而制定的规则。 所以请告诉我如何做到这一点或实现这一目标的任何替代方法。

最佳答案

您没有描述您得到的实际行为,所以我有点猜测,但我认为您的问题出在 AJAX 的异步部分。 您会看到,当您的 onbeforeunload 处理程序执行时,它很可能会启动 AJAX 调用但是,它不会阻塞等待其结果返回。相反,执行将继续,并且 onbeforeunload 将在您从 AJAX 请求获得任何结果之前完成(如果进行任何调用)。

首先添加一些调试跟踪以验证您的处理程序是否实际执行。如果是,请添加一个空闲循环以使其保持忙碌(防止它返回)并查看 AJAX 调用是否通过(我会为此检查服务器端)。

如果情况确实如此,我想您将不得不修改空闲循环以查询某种标志。或者甚至更好,如果您使用的库允许它,使服务器调用同步。

关于javascript - 无法使用 "window.onbeforeunload"更改网页位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10010326/

相关文章:

javascript - 如何在 onClose 中使用日期选择器选项

使用 jQuery 在 Internet Explorer 上出现 Javascript 错误,但在 Firefox 上工作正常

python - 扩展管理index.html模板

javascript - jQuery - Mouseenter/Mouseleave 父/子问题

javascript - JavaScript 中函数不返回对象

Javascript 命令插入 HTML

jquery - AJAX POST 无法更新 MySQL 数据库的问题

javascript - 从 jquery 中的选择框值过滤呈现的网格结果

javascript - Dart 可以操作其他窗口中的 HTML 元素吗?

html - 中心内容之外的固定元素