如何输出javascript并在foreach循环中进行睡眠或等待工作

时间:2016-09-26 22:44:30

标签: javascript php jquery arrays

我有一个foreach循环,它使用一组变量来生成带有ajax调用的动态javascript。让我们说我有一个包含10个变量的数组,需要创建10个不同的JS脚本。这些脚本不应该立即执行,它们应至少延迟1-2秒。但是,我无法通过睡眠或等待来完成这项工作。这是我的代码:

<?php
foreach ($one as $two) {
$somevariable = $two['sth'];
?>

<script type="text/javascript">
$( document ).ready(function() {
  var somevariable = <?php echo json_encode($somevariable); ?>;
  // JS code with ajax call, using somevariable
});
</script>

<?php
sleep(2); // doesn't work, everything is executed at once
wait(2); // doesn't work, everything is executed at once
}
?>

我做错了什么?如果我回复脚本,代码会工作吗?我想避免这种情况,因为JS代码很长很复杂。

1 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:首先,从你的php代码中形成一个javascript数组。

<?php
foreach ($one as $two) {
    $somevariable[] = "'".json_encode($two['sth'])."'";
}
$jsArray = '['.implode(',',$somevariable).']';
?>

然后将数组传递给你的javascript并运行一个间隔为2秒的循环。

<script type="text/javascript">
$( document ).ready(function() {
  var somevariablearray = <?php echo $jsArray; ?>;
  var ln = somevariablearray.length();
  for (i = 0; i < ln; i++) {
      var somevariable = somevariablearray[i];
      setTimeout(function(){
          console.log("Wait 2 sec before next call");
      }, 2000);
      // JS code with ajax call, using somevariable
  }
});
</script>

代码未经过测试,可能无法按预期工作,但只是为了给您一个大致的想法。