【问题标题】:Counter variable does not persist when loading a new page加载新页面时计数器变量不存在
【发布时间】:2013-03-17 10:51:52
【问题描述】:

我想在 javascript 中使用计数器变量,例如带计时器的静态变量。计数器必须每秒减 1。我正在做在线考试。在回答问题时,新问题出现在同一页面上。当计数器变量用新问题(意味着新页面)初始化时,我的问题就开始了。计数器变量不会在新页面上持续存在...建议任何解决方案

<script language="JavaScript">

function ExamTimer() 
{   
if ( typeof ExamTimer.counter == 'undefined' )   
{   
ExamTimer.counter = 30000;  // 30 min
    }
else
{

 ExamTimer.counter = ExamTimer.counter-1;   
    if(ExamTimer.counter<=0)
    {
          alert("exam finish");
     }
setTimeout(ExamTimer, 1000);

  }
window.onload=ExamTimer;
</script>

【问题讨论】:

  • 如何加载新问题?通过页面刷新还是通过 ajax 调用?使用 ajax 将最大限度地减少页面重新加载
  • 我不得不问 - 你为什么要存储经过的秒数而不是开始时间?通过存储服务器启动时间,您的应用程序将提供更真实的结果,并且不会因中间服务器等而受到任何失真。

标签: javascript counter


【解决方案1】:

Javascript 变量并不意味着比当前页面加载更有效。浏览器的 Javascript 引擎会在每次页面加载时执行代码(尽管 most browsers cache the complied code),因此每当页面重新加载时客户端变量都会丢失。

有几种常见的方法可以将值从一个页面传递到另一个页面:

  1. DOM storage
  2. Cookies
  3. 通过 GET 或 POST 请求的服务器端变量

无论您选择何种方法,请记住它必须能够充分抵御用户不必要的操作。

【讨论】:

    【解决方案2】:

    使用 ajax 将值从一个页面传递到另一个页面。使用会话保持最后剩余时间泰语传递到下一页

    <script language="JavaScript">
    
     function ExamTimer() 
     {   
     if ( typeof ExamTimer.counter == 'undefined' )   
     {   
      ExamTimer.counter = <cfoutput>#session.RemainTime#</cfoutput>;
      }
      else
       {
    
     ExamTimer.counter = ExamTimer.counter-1; 
     $.get('linktosend.cfm',{counter:ExamTimer.counter},function(responseText)
        { 
    // value of ExamTimer.counter send to linktosend.cfm and store in session.RemainTime           
     });  
     if(ExamTimer.counter<=0)
     {
           alert("exam finish");
     }
    setTimeout(ExamTimer, 1000);
    
     }
     window.onload=ExamTimer;
    
     </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多