2016-09-26 132 views
0

我有一个foreach循环,它使用一个变量数组来产生带有ajax调用的动态javascript。假设我有一个10个变量的数组,需要创建10个不同的JS脚本。这些脚本不应该一次执行,它们应该有至少1-2秒的延迟。但是,我无法用睡眠或等待来完成这项工作。这是我的代码:如何在foreach循环中输出javascript并进行睡眠或等待工作

<?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代码很长很复杂。

+0

由于您的'sleep()'在PHP中,唯一发生的事情是将脚本发送到客户端需要更长的时间。 PHP在服务器上被解析,当它完成后,它被发送到javascript被解析的客户端。 –

+0

为什么不这样做,反过来,使间隔xmlhttprequest而不是 – Ghost

+0

你应该看看'setTimeout()' - 功能我的JavaScript。在这里阅读有关它:http://www.w3schools.com/jsref/met_win_settimeout.asp –

回答

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> 

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