php循环中的javascript超时

时间:2014-11-17 10:31:42

标签: javascript php settimeout

我试图在数据库中提供的坐标处逐个画布。目前它的工作原理是在同一时间打印所有的圆圈,所以下一部分是让它们逐个打印,以便用户可以观看。嵌入在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);
?>

1 个答案:

答案 0 :(得分:2)

我强烈建议您将所有数据发送到JS层,然后由UI端处理执行延迟,但如果您有兴趣知道为什么sleep是不太正常 - 解释在这里:

默认情况下,大多数PHP配置会将整个页面存储在缓冲区中,只有在PHP脚本完成后才将其发送到浏览器。您通常可以通过强制输出缓冲区来清除此行为,以及#34; flush&#34;只要您想使用ob_flush立即向其发送数据,就可以使用客户端。