Таймер обратного отсчета-php + mysql + js - PullRequest
0 голосов
/ 21 июня 2011

Я работаю над онлайн-экзаменом.В котором длительность экзамена будет выбрана через mysql (в минутах).Я хочу показать время обратного отсчета в верхней части страницы.

в настоящее время я использую

http://javascript.internet.com/time-date/countdown-timer.html

, но главная проблема заключается в том ... когда каждый раз появляется новый вопрос ... страница обновляется и ... сбрасываетсяснова с самого начала.

Пожалуйста, помогите мне, где главная проблема?

или любой другой пример, если вы хотите предложить?

Спасибо

Ответы [ 4 ]

2 голосов
/ 24 июля 2011

Перед запуском теста необходимо рассчитать точное время окончания теста на стороне сервера и сохранить его в сеансе:

<?php
if (empty($_SESSION['test_will_end_by'])) {
    $_SESSION['test_will_end_by'] = time() + $test_duration_in_seconds;
}
?>

Тогда, если вы предоставите его клиентскому скрипту из HTML:

Time left:
<span class="timer" data-end="<?php 
    echo date(DateTime::RFC1123, $_SESSION['test_will_end_by']); 
?>"></span>

Добавьте этот код в обработчик DQ-ready для jQuery, чтобы запустить все таймеры на странице:

$('.timer').each(function() {
    var target = new Date($(this).data('end')), update, $this = $(this);
    (update = function () {
        var now = new Date();
        $this.text((new Date(target - now)).toUTCString().split(' ')[4]);
        if (Math.floor((target - now)/1000) == 0) return; // timer stops
        setTimeout(update, 1000);
    })();
});
1 голос
/ 21 июня 2011

Вы можете сохранить текущее значение в файле cookie, используя форму submit или страницу beforeunload events.Затем, когда загружается новая страница, получите оставшееся время и продолжайте обратный отсчет.Это также учитывает некоторую задержку в сети.

Обратите внимание, что пользователь может получить доступ и изменить значение файла cookie.

1 голос
/ 21 июня 2011

Сохранять время начала вопроса в сеансе, когда при каждом обновлении страницы получают разницу времени начала сеанса с сервера и отображают их на веб-странице.Часть приращения, которую вы можете выполнять из кода JavaScript на стороне клиента, не используя AJAX.

1 голос
/ 21 июня 2011

Каждый раз, когда вы обновляете страницу, код JavaScript запускается снова, поэтому таймер сбрасывается. Чтобы решить эту проблему, получите контент без обновления страницы, а именно: Ajax.

...