【问题标题】:Make a GET/POST request inside 'onbeforeunload' function在“onbeforeunload”函数中发出 GET/POST 请求
【发布时间】:2017-10-08 17:45:21
【问题描述】:
我想在用户离开页面时发出 HTTP POST(甚至 GET 也可以)请求。
我尝试使用“onbeforeunload”“卸载”事件监听器来观察用户何时重定向到其他不同的页面。
有什么方法可以检查用户是否在默认的“onbeforeunload”确认框中单击了“离开”或“留下”按钮?
我只想在他单击“离开”按钮时调用该函数(发出请求)。
我怎样才能做到这一点?
【问题讨论】:
-
-
您只需要点击unload 事件,该事件仅在用户在onbeforeunload 交互过程中确认离开时触发。您必须使 ajax 调用同步。见this。
标签:
javascript
jquery
angularjs
dom-events
onbeforeunload
【解决方案1】:
你可以试试
window.onunload
功能取决于浏览器
window.onbeforeunload和window.onunload都有,根据浏览器的不同,使用方式不同。Quote from here
【解决方案2】:
onunload(或 onbeforeunload)无法将用户重定向到另一个页面。这是出于安全原因。
如果您想在用户离开页面之前显示提示,请使用
在卸载前:
window.onbeforeunload = function(){
return 'Are you sure you want to leave?';
};
或者使用 jQuery:
$(window).bind('beforeunload', function(){
return 'Are you sure you want to leave?';
});
这只会询问用户是否要离开页面,如果他们选择留在页面上,您将无法重定向他们。如果他们选择离开,浏览器将转到他们告诉它去的地方。
您可以在页面卸载之前使用 onunload 执行操作,但不能从那里重定向(Chrome 14+ 会阻止 onunload 中的警报):
window.onunload = function() {
alert('Bye.');
}
或者使用 jQuery:
$(window).unload(function(){
alert('Bye.');
});
【解决方案3】:
好吧,这就是我所做的:
- 当用户尝试离开页面时 - 在 onbeforeunload 事件监听器中调用 API(如果用户点击离开按钮,我想调用该 API)。
- 如果用户点击离开按钮,他将被重定向到其他页面。
- 如果用户单击停留按钮,我在 onbeforeunload 事件侦听器中有一个超时功能,该功能将在用户停留在当前页面本身的一定时间(2 秒)后执行。 [在这个 API 中,我撤销了在第一步中调用的 API 所做的操作]