Таймер в веб-приложении - PullRequest
       8

Таймер в веб-приложении

0 голосов
/ 04 февраля 2010

Я пытаюсь создать веб-приложение для тестирования (как на экзамене) с CakePHP.

При запуске теста веб-сервер сохраняет точное время начала сеанса. Когда тест закончится, и клиент отправит ответы веб-серверу, веб-сервер перепроверит время отправки с предыдущим временем запуска. Если общее время теста находится в пределах указанного предела ошибки (например, 5 минут), результат теста будет принят.

Я уже выполнил эту часть и сейчас использую плагин обратного отсчета jQuery для отображения таймера в клиенте (браузере). Этот таймер также используется для автоматической отправки формы, если срок ее действия истек.

Проблема обновления страницы приведет к сбросу таймера. Движение вперед и назад также сделает это (поскольку это по существу освежает).

Несмотря на то, что общее время проведения теста записывается и проверяется на сервере (если пользователь подделал таймер и отправил тест, система отклонит его), существует ли в любом случае это, чтобы предотвратить это или, по крайней мере, дать предупреждение, или еще лучше, если вы автоматически отправите тест в случае вмешательства пользователя (что, конечно, будет отклонено)?

Я знаю, что мог бы сделать это, используя AJAX (все еще новичок в этом), но руководители сказали мне не делать этого из-за ограничения пропускной способности (что я так не думаю). Итак ... кто-нибудь?

Спасибо, прежде чем!

Ответы [ 2 ]

1 голос
/ 04 февраля 2010

Вам нужно узнать текущее время сервера и время начала тестирования.Вычтите оба, и вы получите, сколько времени пользователь уже провел в этом тесте.Теперь просто вычтите это значение из вашего ограничения по времени (5 минут), и у вас останется время;значения меньше нуля означают, что время теста закончилось.

0 голосов
/ 04 февраля 2010

Во-первых, требуется не столько ajax, сколько концепция того, чтобы сервер устанавливал таймер клиента при загрузке страницы. Да, вы можете сделать это через ajax - запросить у клиента текущее время для document.ready (). Тем не менее, если вам не нужны дополнительные функции синхронизации (которые, честно говоря, открывают целую другую папку с червями), нет причин делать отдельный HTTP-запрос через ajax, когда вы можете просто установить это значение на исходной странице, предоставленной сервером.

Итак, если ваша страница / exams / page, в методе ExamsController :: page () вы можете сделать что-то вроде этого:

$this->set( 'cur_time', date( 'N-d-Y', strtotime() );

Затем в представлении, которое вы отображаете, просто сделайте что-то вроде этого:

<?php echo $cur_time; ?>

Оберните этот фрагмент в блок кода javascript, который установит переменную JS для заполнения счетчика jQuery, который может начать отсчет снова после завершения загрузки страницы. Здесь нет дополнительной пропускной способности!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...