Я изучаю Ajax, используя PHP как back-end. Я пытаюсь извлечь и обновить значения таблиц из базы данных, используя setTimeout в JavaScript.Почему эти два аргумента извлекают одно и то же значение?
Вот мой код: (я объяснил ниже проблемы)
А. 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 присвоены значения, и они должны иметь РАЗЛИЧНЫЕ значения. Я здесь что-то не так?
Могу ли я решить эту проблему, не изменив этот код? –
Я думаю, что это потребует от меня существенной переделки, я обновил свой ответ с помощью возможного пути к решению. –