2016-03-20 12 views
0

Ich lerne Ajax mit PHP als Back-End. Was ich versuche, ist das Holen und Aktualisieren der Tabellenwerte aus der Datenbank mit setTimeout in JavaScript.Warum erhalten diese beiden Argumente den gleichen Wert?

Hier ist mein Code:

A. 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> 

(ich habe das Problem weiter unten erläutert) Wie Sie sehen können, wenn die Seite ex1.php wird im Browser geöffnet, nach 100 Mikrosekunden wird cmpFunc ausgeführt, dann nach 2 Sekunden cmp2Func ausgeführt und Variable h ist ein Wert zugeordnet; und nach 2 weiteren Sekunden myFunc2 ausgeführt (die Tabelle in der Datenbank aktualisiert). Danach wird cmp3Func ausgeführt und Variable h2 ist Wert zugewiesen.

Aber jedes Mal, nur wenn Anweisung ausgeführt wird. Aber eigentlich sollte die Tabelle zwischen h und h2 Werte zugewiesen werden, und sie sollten verschiedene Werte haben. Mache ich hier etwas falsch?

Antwort

0

Der Grund, warum h und h2 immer gleich sind, ist, dass, wenn ex1.php zum ersten Mal auf den Client gerendert wird, die Werte für das Javascript für h und h2 zu diesem Zeitpunkt fest codiert sind, so dass sie jedes Mal gleich sind Sie rufen diese Funktion später auf.

Ich denke, eine Lösung würde das Verschieben des Sql-Blocks für $query="SELECT name from tab3"; auf eine andere Server-Seite, die Sie dann mit einem Ajax-Aufruf innerhalb Ihrer -Funktion treffen würde beinhalten.

+0

Kann ich dieses Problem lösen, indem ich diesen Code nicht viel ändere? –

+0

Ich denke, es würde mich einige grundlegende Überarbeitung benötigen, aktualisierte ich meine Antwort mit einem möglichen Weg zu einer Lösung. –

Verwandte Themen