#javascript #jquery #ajax
#javascript #jquery #ajax
Вопрос:
У меня есть функция таймера, и мне нужно продолжить таймер, когда страница обновляется, и выполнить вызов ajax, когда страница закрыта (это работает). Как я могу это сделать?
У меня есть следующий код:
$(document).ready(function() {
function setTimer(timeSpent) {
$.post('./modules/ajax/task.php', {time:timeSpent}, function(data) {
$('#timer').timer({
seconds: data.timerTime
});
if(!isNaN(timeSpent)){
$('#timer').timer('remove');
}
}, 'json');
}
setTimer('start');
$(window).on('blur', function() {
setTimer($('#timer').data('seconds'));
}).on('focus', function() {
setTimer('resume');
}).unload(function() {
var timer = $('#timer'),
timeSpent = timer.data('seconds'),
userID = timer.data('userid'),
taskID = timer.data('taskid');
$.post('./modules/ajax/task.php', {
timeSpent: timeSpent,
userID: userID,
taskID: taskID,
save: 'save'
}, function(data) {})
});
});
Комментарии:
1.
onbeforeunload
Событие вызывается перед выгрузкой страницы, но нет встроенного механизма, позволяющего узнать, обновляется ли страница, браузер / вкладка были закрыты или пользователь перешел на другую страницу. Лучшим решением было бы сохранить статическую конечную дату (локально или удаленно) и обратный отсчет до этой даты, независимо от того, в каком состоянии находится страница2.
make an ajax call when the page is closed (this is working)
Может работать на локальном сервере, но не на удаленном, наверняка
Ответ №1:
Используйте onbeforeunload
событие, которое вызывается перед обновлением страницы, закрытием вкладки или закрытием браузера.
window.onbeforeunload = function (e) {
e = e || window.event;
// For IE and Firefox prior to version 4
if (e) {
e.returnValue = 'Any string';
}
// For Safari
return 'Any string';
};
Вы можете запустить этот скрипт из консоли браузера и проверить результат.