Javascript $window.unload中的Post方法从未在关闭选项卡时调用更改url,而是在关闭浏览器时运行
我的解锁方法在更改url时从未被调用。关闭浏览器将执行该方法。关闭选项卡不会执行该方法。。。我得出这个结论是因为服务器端没有收到post(通过检查控制台)Javascript $window.unload中的Post方法从未在关闭选项卡时调用更改url,而是在关闭浏览器时运行,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我的解锁方法在更改url时从未被调用。关闭浏览器将执行该方法。关闭选项卡不会执行该方法。。。我得出这个结论是因为服务器端没有收到post(通过检查控制台) 首先,除非$window引用window,否则请尝试删除$。其次,event.preventDefault()不会阻止浏览器卸载窗口。在大多数浏览器中,它只会询问用户是否想离开页面。如果用户选择不停留在页面上,并且AJAX调用尚未完成,浏览器可以立即关闭它,因此,您不会在服务器端收到任何POST请求 为了实现我认为您正在尝试的目标,我会每隔一
首先,除非
$window
引用window
,否则请尝试删除$
。其次,event.preventDefault()
不会阻止浏览器卸载窗口。在大多数浏览器中,它只会询问用户是否想离开页面。如果用户选择不停留在页面上,并且AJAX调用尚未完成,浏览器可以立即关闭它,因此,您不会在服务器端收到任何POST请求
为了实现我认为您正在尝试的目标,我会每隔一段时间ping服务器一次,如果服务器在合理的时间内没有收到ping,则解锁报告。我们需要更多信息来帮助,因为基本原理确实有效,如图所示。。。您在哪些浏览器中看到此问题?
/* Callback function that unlocks the current time report when leaving the angular app */
$window.onbeforeunload = function (event) {
event.preventDefault();
if ($scope.reportData != undefined && $scope.reportData.superId != undefined && !archive) {
$http.post(Settings.timereportBaseURLhttp + 'monthlyreport/' + $routeParams.office + '/current/' + $routeParams.tmsstep + '/' + $scope.reportData.superId + '/unlock');
}
};