无法使用“window.onbeforeunload”更改网页的位置

时间:2012-04-04 11:38:43

标签: javascript jquery html

任何人都可以告诉我,如何在执行以下操作时发出AJAX请求并将用户发送到其他页面?

  1. 点击下一步,浏览器的上一页。
  2. 以任何方式刷新页面(f5,ctrl + r,刷新btn)。
  3. 尝试关闭浏览器的窗口(这里我不想重定向他,只需要AJAX请求)。
  4. 我认为window.onbeforeunload可以成功,

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

    但它根本不起作用........ 在搜索了这个主题后,我发现这是一种针对浏览器安全性的规则。 所以请告诉我如何做到这一点或任何其他方式来实现这一目标。

2 个答案:

答案 0 :(得分:1)

我认为没有。
浏览器可以在操作后随时停止执行。 Ajax调用是非常长的操作。

使用onbeforeunload,您可以询问用户问题,例如“确定使用吗?”。您必须返回字符串或将其分配给event.returnValue

您可以在此处阅读https://developer.mozilla.org/en/DOM/window.onbeforeunload

我认为对于您的问题,您可以尝试进行同步调用或尝试使用某些GET参数打开iframe,或者在此函数的正文中的iframe中发送表单数据。但我不确定时间。

答案 1 :(得分:1)

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

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

如果确实如此,我猜你必须修改空闲循环以查询某种标志。或者甚至更好,如果你使用的库允许它,使服务器调用同步。