[英]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.