我正在学习使用PHP作为后端的Ajax。我正在尝试的是使用JavaScript中的 setTimeout 从数据库中获取和更新表值。
这是我的代码: (我已经解释了下面的问题)
一个。的 ex1.php
<?php
$a=mysqli_connect("localhost", "root", "", "ndb");
$query="SELECT name from tab3";
$queryrun=mysqli_query($a, $query);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="jquery-2.2.0.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script>
var update= setTimeout(myFunc2, 4000);
function myFunc2(){
var yhttp= new XMLHttpRequest();
yhttp.onreadystatechange=function(){
//if(yhttp.readyState==4 && yhttp.status==200)
};
yhttp.open("GET", "exresponse2.php", true);
yhttp.send();
}
</script>
<script>
var cmp= setTimeout(cmpFunc, 100);
function cmpFunc(){
var h="";
var h2="";
var cmp2= setTimeout(cmp2Func, 2000);
function cmp2Func(){
h= '<?php $height=mysqli_num_rows($queryrun); echo $height; ?>';
}
var cmp3 =setTimeout(cmp3Func, 8000);
function cmp3Func(){
h2= '<?php $height2=mysqli_num_rows($queryrun); echo $height2; ?>';
if(h==h2)
{
alert(h+" "+h2);
}
else
{
alert("Not same");
}
}
}
</script>
</head>
<body>
<div id="id1" style="float: left; width: 300px">
The names are displayed below:</div>
<div id="id2" style="float: left; width: 200px">
<button onclick="myFunc2()">Submit</button>
</body>
</html>
B中。的 exresponse.php
<?php
$a=mysqli_connect("localhost", "root", "", "ndb");
$query="SELECT name from tab3";
$queryrun=mysqli_query($a, $query);
$names=array();
while($row=mysqli_fetch_assoc($queryrun))
{
$names[]= $row["name"];
}
$x="";
$count=0;
for($x=0; $x<25; $x++)
{
echo "Name: ".$names[$x];
echo "<br>";
}
?>
<html>
<head>
<script src="jquery-2.2.0.js"></script>
</head>
<title></title>
<body>
</body>
</html>
如您所见,在浏览器上打开 ex1.php 页面后,执行100微秒 cmpFunc ,然后在2秒后 cmp2Func 执行和变量 h 被赋予一些值;然后再执行2秒 myFunc2 (更新数据库上的表)。之后,执行 cmp3Func ,并为变量 h2 分配值。
但每次,只有语句执行。但实际上表格应该在 h 和 h2 分配值之间更新,并且它们应该具有不同的值。我在这里做错了吗?
答案 0 :(得分:0)
h和h2总是相同的原因是当ex1.php首次呈现给客户端时,javascript的值在那个时刻被硬编码为h和h2,所以每次你都是相同的稍后调用js函数。
我认为解决方案是将$query="SELECT name from tab3";
的sql块移动到另一个服务器页面,然后在cmp3Func
函数中使用ajax调用来访问该页面。