代码之家  ›  专栏  ›  技术社区  ›  codingbbq

为从数据库中获取的每个php变量调用单个javascript函数,多个倒计时程序

  •  0
  • codingbbq  · 技术社区  · 14 年前

    我试图得到一个多重倒计时系统,事件的日期和分钟正在从数据库中提取。这样的事情可能很多。在获取事件日期之后,我将这个值传递给一个javascript函数,该函数在客户端使用setTimout函数每1秒运行一次。这只适用于一个事件。但是,对于许多事件,如何实现相同的功能。i、 我想为每个事件运行javascript函数。

    while($row = mysql_fetch_array($query)){
    $a = $row['day'];
    $b = $row['minutes'];
    

    }

    现在我需要在javascript函数中传递所有这些值。 如果只有一个事件,我可以直接传递php值。但对于多个事件,我不知道该怎么办。我尝试在while循环中使用javascript函数,但是我得到了一个function not defined错误,这是显而易见的,因为php是在javascrip之前运行的。任何逻辑,或帮助感谢。

    谢谢

    2 回复  |  直到 14 年前
        1
  •  0
  •   Yanick Rochon    14 年前

    在PHP中,首先构建数据数组。你怎么做并不重要,但最终,它可能看起来像:

    $data = array(
       array('day' => 1, 'minutes' => '15'),
       array('day' => 0, 'minutes' => '45'),
       array('day' => 15, 'minutes' => 52'),
       // etc.
    );
    

    然后(仍然使用PHP,创建一个Javascript函数,如:

    var data = <?= json_encode($data) ?>;  // encode your PHP data into JSON notation
    var interval = setInterval(function() {
       for (var i=0; i<data.length; i++) {
          // do something with your data
          // data[i].day   ... data[i].minutes ... etc.
       };
    }, 1000);   // run every 1 sec
    

    请注意,数据越多,速度越慢 setInterval 设置间隔 setTimeout 在你的情况下,避免堆积你的电话从长远来看,因此你不应该依赖 设置超时 但您应该有一个变量来计算每次调用之间的确切时间跨度。

    有点像;

    var last_time = new Date().getTime();
    

    然后,在你的 设置间隔 函数,获取自上次(或自页面加载以来首次)调用最后一个函数的时间

    var cur_time = new Date().getTime();
    var timespan = (cur_time - last_time) / 1000; // millis > sec
    last_time = cur_time; // update last_time
    ...
    
        2
  •  1
  •   Amadan    14 年前

    不要在JS中运行N个函数,运行一个可以执行N个操作的函数。将PHP中的值作为JS数组传递,并在超时处理程序中遍历该数组。你的JS看起来像这样:

    // This line generated by PHP:
    var thingies = ["Thingy 1", "Thingy 2", "Thingy3"];
    
    // This is static JS:
    function thingy() {
      for (var i in thingies) {
        processThingy(thingies[i];
      }
      setTimeout(thingy, 1000);
    }
    

    或者,你也可以 thingies