2016-03-20 25 views
0

PHP'yi arka uç olarak kullanarak Ajax'ı öğreniyorum. Denediğim, tablo değerlerini setTimeout'u JavaScript kullanarak veritabanından almak ve güncellemek. İşte Bu iki argüman neden aynı değeri getirir?

benim kod:

A. ex1.php (aşağıda sorunu anlattım)

<?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> 

Gördüğünüz gibi, sayfa ex1.php iken tarayıcıda açılır, 100 mikro saniye sonra cmpFunc yürütülür, daha sonra 2 saniye sonra cmp2Func yürütür ve değişken h bir değer atanır; ve 2 saniye daha sonra myFunc2 yürütülür (veri tabanındaki tablo güncellenir). Bundan sonra cmp3Func yürütülür ve h2 değişken atanır.

Ancak her defasında, yalnızca ifade çalıştırılırsa. Ancak, tablo h ve h2 arasında güncelleştirilmelidir ve değerleri FARKLI değerler olmalıdır. Burada yanlış bir şey mi yapıyorum?

cevap

0

h ve h2'nin her zaman aynı olmasının nedeni, ex1.php ilk önce istemciye işlendiğinde, javascript'in değerleri o anda h ve h2 için kodlanır, böylece her zaman aynıdır Daha sonra js işlevi diyorsun.

Bir çözüm, $query="SELECT name from tab3"; için sql bloğunu cmp3Func işlevinizin içinde ajax çağrısı ile vurulacak başka bir sunucu sayfasına taşımayı gerektireceğini düşünüyorum.

+0

Bu sorunu çok değiştirmeden bu sorunu çözebilir miyim? –

+0

Bana biraz daha önemli bir yeniden çalışma yapmam gerektiğini düşünüyorum, cevabımı bir çözüm için olası bir yolla güncelledim. –

İlgili konular