PHP / jQuery AJAX算法每隔一段时间才有效

时间:2012-01-05 21:47:43

标签: php jquery mysql ajax algorithm

我正在尝试构建一个页面,该页面使用jQuery每秒调用一个数据库并返回编号最高的行。

jQuery代码如下(这是$('document')。ready)

    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”和“NOTHING!”之间交替显示,我无法弄清楚原因。

2 个答案:

答案 0 :(得分:3)

如果13为最高select * from tesstable where id > 13,则id将始终为空结果。你想要的是这个:

select max(id) as id from testtable

您不必发回$id,如果它上面有索引,此查询将很快返回。

此外,您的原始查询的引号中的列id,而不是反引号。您将字符串“id”与变量$id进行比较。最重要的是,您可以在此处使用SQL注入,因此请使用mysql_escape_string,PDO或使用提供的max查询完全删除变量引用。

答案 1 :(得分: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]");