PHP/jQuery AJAX算法只每隔一段时间工作一次


PHP/jQuery AJAX algorithm only working every other time

我正在尝试构建一个页面,该页面使用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,jQuery被解析为一个整数,使id等于13。然后13在一分钟后再次发送到PHP文件,并且过程循环。

实际情况是,它在显示"13"answers"什么都没有!"之间交替,我不明白为什么。

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

select max(id) as id from testtable

您不必发回$id,如果它有一个索引,这个查询会很快返回。

此外,原始查询的列id包含引号,而不是反引号。您正在将字符串"id"与变量$id进行比较。最重要的是,您在这里容易受到SQL注入的影响,所以使用mysql_escape_string、PDO,或者使用提供的max查询完全删除变量引用。

我建议你这样做。试试看。看看它是否有效。

   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]");