簡體   English   中英

php循環中的javascript超時

[英]javascript timeout within php loop

我試圖在畫布上按照數據庫中提供的坐標一張一張地打印圓圈。 目前,它的工作原理是在“相同時間”打印所有圓圈,因此下一部分是使它們逐個打印,以便用戶觀看。 php while循環中嵌入的JavaScript有點混亂。 我想將數據傳遞給javascript的一種更有效的方法是使用JSON,但這只是我快速結合在一起以了解可能的方法。

我嘗試在繪制圓的代碼周圍設置超時,但是所有這些操作是將所有圓合並在一起之前,將過程延遲了設置的時間,而不是每次循環時都延遲了。 我也在循環內嘗試了php代碼sleep(1) ,結果類似。

這與JavaScript在客戶端和php服務器端有關嗎?

<?php
// Create connection
$conn = mysqli_connect($servername, $username, $password, $db);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";

echo "<br/>";
echo "<br/>";
?>

</head>
<body>

<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>


<?php
$sql = "SELECT xcoord, ycoord FROM population LIMIT 10";
$result = mysqli_query($conn, $sql);
            while($row = mysqli_fetch_array($result)) {
            $xcoord = $row['xcoord'];
            $ycoord = $row['ycoord'];
?>
<script>

var x = "<?php echo $xcoord; ?>";
var y = "<?php echo $ycoord; ?>";
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.arc(x, y, 5,0, 2*Math.PI);
ctx.fillStyle = "red";
ctx.fill();
ctx.stroke();

</script> 
<?php
        }
mysqli_close($conn);
?>

我強烈建議您將所有數據發送到JS層,然后由UI端處理執行延遲,但是如果您想知道為什么sleep話,請參見以下說明:

默認情況下,大多數PHP配置會將整個頁面存儲在緩沖區中,僅在PHP腳本完全完成后才將其發送到瀏覽器。 通常,只要您想立即使用ob_flush將數據發送到客戶端,就可以強制輸出緩沖區“刷新”到客戶端,從而規避此行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM