jquery与外部PHP剩余时间计数器。不止一次执行

时间:2017-04-15 07:32:20

标签: php jquery

想要做以下事情:

1)每3分钟jquery开始执行,转到外部php,检查会话值

2)返回(从外部php)并显示剩余时间计数器

在前3分钟后,所有工作都按预期进行。但是在第二个3分钟后,我得到function updateClock ( )执行2次,在第3个3分钟之后,好像执行了3次,依此类推。

如何在每次执行时重置$('#remaining_time').html()?尝试在外部php插入像?> <script type="text/javascript">$('#remaining_time').html('');</script> <?php这样的javascript,但它没有帮助。在每次执行时,我想重置剩余时间计数器。

这是代码(代码的一部分)

Html

<div class="div_show_hide" id="logout_warning_popup">

 <div class="" style="position:absolute; width:100%; height:100%; left:0; bottom:0; background: rgba(199,199,199,0.9); display: table; ">

  <div style="display: table-cell; vertical-align: middle; text-align:center;">

   <span style="align:center; width:200px; height:200px; border:solid 0px red; background:#fff; padding:20px;">
   Session will expire after <span id="remaining_time"></span> seconds.
   </span> 

   <br/>

   <span style="cursor:pointer; border:solid 1px green; margin:0 10px 0 0;" id="continue_session">Continue the session</span>

  </div>

 </div>

</div>

Jquery的

function logout_with_warning() {

  $.post("_logout_warning.php", function(data_logout_warning) {
  $('#logout_warning_popup').show();
  var time_when_must_logout = new Date().setTime(new Date().getTime() + 1000 * 60 * 2);//2 minutes

  $('#remaining_time').html( '' + Math.round( ( ( parseInt(time_when_must_logout,0) - parseInt((new Date().setTime(new Date().getTime())),0) ) )/1000 ) );

    function updateClock ( ){
    $('#remaining_time').html( '' + Math.round( ( ( parseInt(time_when_must_logout,0) - parseInt((new Date().setTime(new Date().getTime())),0) ) )/1000 ) );
    }
    setInterval( updateClock, (1000*1) );// one second


  });

}
setInterval( logout_with_warning, (60000*3) );

1 个答案:

答案 0 :(得分:1)

当您在ajax调用的回调中调用setInterval时,您将有两个setInterval调用处于活动状态,这两个调用都会一直调用 logout_with_warning 函数定期。在接下来的ajax呼叫之后,你会有三个人这样做......等等。

您可以通过使用setTimeout替换这些调用来轻松解决此问题,declare var _createLib: (config: Object) => Promise<Lib>; export default _createLib; export interface Lib { version: string; } 只调用一次回调函数。