2016-09-26 75 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> 

該代碼未經測試,可能無法按預期工作,但只是爲了給您一個大致的想法。