2012-01-05 43 views
1

我正在嘗試構建一個頁面,該頁面使用jQuery每秒調用一次數據庫並返回最高編號的行。PHP/jQuery AJAX算法每隔一次只工作

jQuery的代碼如下(這是$( '文件')準備)

var id = 0; 
    $.post('check.php', 'id=0', function(data){ 
     id = parseInt(data); 
     $('h1').text(data); 
    }); 

    var timer = setInterval(function() { 
     $.post('check.php', 'id=' + id, function(data){ 
      if (data != '') 
       $('h1').text(data) 
      else 
       $('h1').text("NOTHING!"); 
     id = parseInt(data); 
     }); 
    }, 1000); 

而PHP文件,check.php,具有下面的代碼(連接到數據庫後):

$id = $_POST['id'] - 1; 
$query = "SELECT * FROM testtable WHERE 'id' > $id ORDER BY id DESC"; 
$result = mysql_query($query); 
$row = mysql_fetch_row($result); 
echo "$row[0]"; 

'id'是第一列。
現在最高行號是13.我希望它發送13到PHP文件。 $ id然後是12,所以它會選擇id值大於12的所有行,返回id值爲13的行。然後,它會回顯「13」,它被髮送回jQuery,它被解析爲一個整數,使id等於13.然後13​​分鐘後再次發送到PHP文件,並且進程循環。

實際發生的事情是,它在顯示「13」和「沒有!」之間交替顯示,我找不出原因。

+0

怎麼樣在這裏缺少分號:$('h1').text(data)? – 2012-01-05 21:56:58

+0

@AlfredoCastañedaGarcía,這是無意的,但這是JavaScript,因此無論如何它並不重要。 – 2012-01-05 22:04:24

回答

3

因爲select * from tesstable where id > 13將永遠是一個空的結果,如果13是最高id。你想要的是這樣的:

select max(id) as id from testtable

您不必發回$id,如果它有它的索引,該查詢將返回得非常快。

此外,您的原始查詢有引號中的列id,而不是反引號。您將字符串「id」與變量$id進行比較。爲了避免這種情況,您可能在此處使用SQL注入,因此請使用mysql_escape_string,PDO或使用提供的max查詢完全刪除變量引用。

+0

這就是爲什麼它是$ _POST ['id'] - 1.它通過13,但是然後$ id是13 - 1 = 12。所以13總是大於12. – 2012-01-05 21:55:48

+1

@AndrewLatham - 這也可能是事實,把你的列名'id'放在引號(')中而不是反引號(')。 – Eric 2012-01-05 21:57:37

+0

這就是問題所在。我需要理清何時將列名放在引號中,何時不放。 – 2012-01-05 22:01:47

0

我建議你這樣做,嘗試一下並告訴它是否正常工作。

var id = 0,count = 0; 
     $.post('check.php', {id:0}, function(data){ 
      id = +data["rows"]; // Try parse or just a + 
      $('h1').text(data); 
      count++; 
     },"json"); 

     var timer = setInterval(function() { 
      $.post('check.php', {id:id-count}, function(data){ 
       if (data["rows"] != null || data["rows"] != "") 
        $('h1').text(data) 
       else 
        $('h1').text("NOTHING!"); 

      id = +data["rows"]; 
      count++; 
      },"json"); 
     }, 1000); 

$id = $_POST['id']; 
$queryString = ($id == 0) ? "'id' > $id" : "'id' = $id"; 
$query = "SELECT * FROM testtable WHERE $queryString ORDER BY id DESC"; 
$result = mysql_query($query); 
$row = mysql_fetch_row($result); 
echo json_encode(array("rows" => "$row[0]");