2010-02-04 6 views
0

CakePHP를 사용하여 웹 기반 테스트 (시험처럼)를 만들려고합니다.웹 응용 프로그램의 타이머

테스트가 시작되면 웹 서버는 정확한 시작 시간을 세션에 저장합니다. 테스트가 끝나고 클라이언트가 웹 서버에 응답을 제출하면 웹 서버는 이전 시작 시간과 함께 제출 시간을 다시 확인합니다. 총 테스트 시간이 특정 에러 마진 (예 : 5 분) 내에 있으면 테스트 결과가 수락됩니다.

이 부분을 이미 완료했으며 현재 jQuery Countdown Plugin을 사용하여 클라이언트 (브라우저)에 타이머를 표시했습니다. 이 타이머는 만료 된 경우 자동으로 양식을 제출하는데도 사용됩니다.

문제는 페이지를 새로 고침하여 타이머를 재설정하는 것입니다. 앞뒤로가는 것도 그렇게 할 것입니다 (본질적으로 상쾌합니다).

취해진 총 테스트 시간은 서버에서 기록되고 확인됩니다 (사용자가 타이머를 변조 한 후 테스트를 제출하면 시스템에서이를 거부합니다).이를 방지하거나 적어도 경고를 표시해야합니다. 또는 심지어 더 나은, 사용자 조작의 경우 자동으로 테스트를 제출 (물론 거부됩니다)?

저는 AJAX (아직 초보자입니다)를 사용하여이 작업을 수행 할 수 있음을 알고 있습니다. 그러나 상위 - 업은 대역폭 제한 (그렇게 생각하지 않습니다) 때문에 그렇게하지 않겠다고 말했습니다. 그래서 ... 누구?

전에 감사드립니다!

답변

0

먼저 서버가 클라이언트의 타이머를 페이지로드로 설정한다는 개념이므로, 아약스가 그다지 중요하지 않습니다. 예, 당신은 ajax를 통해 이것을 할 수 있습니다 - 클라이언트가 document.ready()에 현재 시간을 요청하게하십시오. 그러나 추가적인 동기화 기능이 필요하지 않으면 (오히려 웜의 웜을 열 수 있습니다.), 원래의 서버 제공 페이지에서이 값을 설정할 수있는 경우 아약스를 통해 별도의 http 요청을 할 이유가 없습니다. 페이지가 ExamsController에서/시험/페이지 : 페이지() 메소드 인 경우

그래서, 당신은 같은 것을 할 수 있습니다 : 당신이 렌더링 뷰에서 다음

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

을, 그냥이

<?php echo $cur_time; ?> 

랩 페이지가로드되면 다시 계산 시작할 수 프라임 jQuery를 카운터에 JS 변수를 설정하는 자바 스크립트 코드 블록에 니펫을 : 같은 것을 할. 여분의 대역폭이 필요 없습니다!

+0

글쎄, 실제로는 내가 원하는 동기화 기능입니다 :) 이미 완료 했으니 까 ... 어쨌든 고마워! – Furunomoe

+0

동일한 종료 시간의 측면에서 동기화를 의미합니까, 아니면 페이지가 해체되는 동안 다시 동기화하고 싶습니까? 후자는 제가 언급 한 것이고, 응용 프로그램이 실시간 일 때만 적용됩니다 (시험에 소요되는 시간을 제한하기보다는). 기본적으로, 두 클럭이 페이지에서 표류 할 수 있다고 생각하면 다시 동기화 할 수 있습니다. 그렇지 않으면 클라이언트의 시계를 신뢰하고 페이지 내에서 동기화하는 것에 대해 걱정하지 않아도됩니다. 물론 제출이 허용되어야하는지 여부를 서버에서 확인하는 것을 잊지 마십시오. 클라이언트 JS가이를 신뢰할 수 없다는 것을 신뢰하십시오. –

1

서버의 현재 시간과 테스트 시작 시간을 가져와야합니다. 둘 다 빼면 사용자가 이미 테스트에 소비 한 시간이 표시됩니다. 이제 시간 제한 (5 분)에서이 값을 빼면 남은 시간이 있습니다. 0보다 작은 값은 테스트 시간이 종료되었음을 의미합니다.