2016-03-20 2 views
0

Я изучаю 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 присвоены значения, и они должны иметь РАЗЛИЧНЫЕ значения. Я здесь что-то не так?

ответ

0

Причина, по которой h и h2 всегда совпадают, заключается в том, что, когда ex1.php сначала отображается клиенту, значения javascript жестко запрограммированы для h и h2 в тот момент времени, поэтому они одинаковы каждый раз вы называете это функцией js позже.

Я думаю, что решение предполагает перемещение блока sql для $query="SELECT name from tab3"; на другую страницу сервера, которую вы затем ударили бы с помощью ajax-вызова внутри вашей функции cmp3Func.

+0

Могу ли я решить эту проблему, не изменив этот код? –

+0

Я думаю, что это потребует от меня существенной переделки, я обновил свой ответ с помощью возможного пути к решению. –

Смежные вопросы