Отслеживание закрытия страницы или ухода с нее
Пишу сайт на фрейме yii2. Понадобилось сделать монопольный доступ к странице редактирования формы update. Для этого использую две переменные edit_on и editor, первая булевая (1 - доступ разрешен, 0 - занят) и во вторую заношу id пользователя, который редактирует, чтобы показывать его другим. При сохранении формы возвращаю edit_on 1 и очищаю editor. Однако нужно отследить, когда пользователь уходит со страницы, не сохранив форму. Была идея отправлять ajax запросы на сервер с обновлением переменной last_update каждые 30 секунд, но это будет загружать сервер. Поэтому появилась другая идея: отследить момент закрытия страницы, и во время него отправить запрос на обновление этих двух переменных.
В js я новичок, поэтому не понимаю, как именно написать часть скрипта, отвечающую за обновление двух переменных в БД.
$(window).bind('beforeunload',function(event){//тут запись переменных});
Отредактировано: Для передачи данных использую функцию sendBeacon. Однако, вопрос тот же, я передаю post переменные на страницу, а как их записать в БД?
function changeEdit(){
var data = {edit_on:1,editor:""};
navigator.sendBeacon(document.URL,data);
};
window.addEventListener('beforeunload', chandeEdit);
Ответы (1 шт):
Получилось таким способом отслеживать закрытие страницы и переход на другие url.
Скрипт:
function changeEdit(){
var id = <? $model->id?>;
var data = new FormData();
data.append('id',id);
navigator.sendBeacon("report/edit",data);
}
window.addEventListener('unload',changeEdit,false);
Экшн:
public function Edit()
{
$id = (int)Yii::$app->request->post('id');
$sql = 'UPDATE report SET edit_on = 0, editor = null WHERE id ='.$id;
\Yii::$app->db->createCommand($sql)->execute();
}