4

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

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

我认为 window.onbeforeunload 可以做到,

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

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

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

4

2 回答 2

1

我想不是。
浏览器可以在操作后随时停止执行。Ajax 调用是很长的操作。

您可以向用户提出诸如“确定使用onbeforeunload吗?”之类的问题。您必须返回字符串或将其分配给event.returnValue

你可以在这里阅读https://developer.mozilla.org/en/DOM/window.onbeforeunload

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

于 2012-04-04T11:44:35.503 回答
1

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

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

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

于 2012-04-04T11:57:53.317 回答