У меня есть простое угловое приложение, которое имеет два вида, которые загружаются с помощью ngRoute. Мне нужно сделать очистку на сервере, когда пользователь перемещается между представлениями и когда пользователь покидает страницу (обновляет окно, закрывает вкладку или закрывает браузер).Как отправить HTTP-запрос onbeforeunload в AngularJS?
Моя первая остановка была здесь: Showing alert in angularjs when user leaves a page. Он решил первый случай, когда пользователь перемещается между представлениями. Я обрабатывается моются так:
$scope.$on('$locationChangeStart', function (event) {
var answer = confirm("Are you sure you want to leave this page?")
if (answer) {
api.unlock($scope.id); //api is a service that I wrote. It uses angular $http service to handle communications and works in all other cases.
} else {
event.preventDefault();
}
});
Однако, я не был в состоянии обрабатывать случай, когда пользователь покидает страницу. После ответа выше и этого Google Groups пост: https://groups.google.com/forum/#!topic/angular/-PfujIEdeCY Я попытался это:
window.onbeforeunload = function (event) {
api.unlock($scope.id); //I don't necessarily need a confirmation dialogue, although that would be helpful.
};
Но это не сработало. Затем я прочитал здесь: How to execute ajax function onbeforeunload?, что запрос должен быть синхронным, а здесь: How to $http Synchronous call with AngularJS, что Angular не поддерживает это (хотя это может быть устаревшим).
Я также попытался позвонить в $ http напрямую (без обслуживания), но это тоже не сработало. В этот момент я застрял. Любые предложения/выводы будут действительно оценены.
Заранее благодарен!
Вы можете показать информацию о том, что данные будут потеряны, если пользователь теперь переместится, просто верните строку внутри обработчика onbeforeunload. – Sebastian