【问题标题】:Trigger ajax call while closing the window关闭窗口时触发ajax调用
【发布时间】:2013-11-25 17:35:37
【问题描述】:

我需要在关闭窗口时触发一个方法。为此,我尝试发出警告声明,它在在 IE 和 FIREFOX 中都可以正常工作但不能在 chrome 中工作。请帮我解决这个问题..

$(window).bind('beforeunload', function(){
   alert ("before unload")
});

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

你不能那样做。现代浏览器无法可靠地对beforeunload 事件执行非即时操作(尤其是通常会阻止所有涉及查询的操作)。这是一种安全措施:任何可能延迟或阻止用户要求关闭窗口的行为都是可以接受的。

您需要更改应用程序的逻辑。现代 AJAX 应用程序必须不断地保存需要保存的数据或提供一种可见的方式来启动保存,它们不能等待窗口关闭。而且您必须在服务器端管理会话生命周期,而不依赖于发出注销的浏览器。

关于警报和 Chrome,这里是 an extract from the MDN

自 2011 年 5 月 25 日起,HTML5 规范声明调用 window.showModalDialog()、window.alert()、window.confirm() 和 在此事件期间可能会忽略 window.prompt() 方法。

很可能越来越多的浏览器会阻止这种在大多数情况下令人痛苦的警报。

【讨论】:

  • 你的意思是说window.unload 本身不起作用???或者只是 window.unload 中的警报部分不起作用?
  • 实际上我需要在窗口关闭时触发注销功能..
  • 在事件处理程序中,您可能(不是 100% 可靠)执行小操作,例如更改 localStorage,但您无法执行 ajax 调用,也无法确定是否可以发出警报。
  • 当窗口关闭时触发注销是没有意义的。您必须管理会话生命周期服务器端,而不依赖于发出注销的浏览器。
  • 好的.. 我会解释一下.. 我们有这样一种功能,即在注销时,表格中的一些细节将被删除......这在 IE 中运行良好,而不是在 chrome 中。这就是问题..不仅仅是会话终止..我们在表中执行了一些数据删除
猜你喜欢
  • 2015-02-23
  • 2012-08-22
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多