【问题标题】:PHP/jQuery AJAX algorithm only working every other timePHP/jQuery AJAX 算法每隔一段时间才有效
【发布时间】:2012-01-06 06:03:19
【问题描述】:

我正在尝试构建一个页面,该页面使用 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!”之间交替显示,我不知道为什么。

【问题讨论】:

  • 这里缺少分号怎么办:$('h1').text(data)?
  • @AlfredoCastañedaGarcía,这是无意的,但这是 JavaScript,所以这并不重要。

标签: php jquery mysql ajax algorithm


【解决方案1】:

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

select max(id) as id from testtable

你不必发回$id,如果上面有索引,这个查询会很快返回。

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

【讨论】:

  • 这就是为什么它是 $_POST['id'] - 1。它通过了 13,但是 $id 是 13 - 1 = 12。所以 13 总是大于 12。
  • @AndrewLatham - 这也可能是因为您将列名 id 放在引号 (') 而不是反引号 (`) 中。
  • 这就是问题所在。我需要弄清楚何时将列名放在引号中,何时不放在引号中。
  • @AndrewLatham - 为你修正了答案:)
  • 谢谢!此外,这只是一个小测试应用程序,我总是在成品中清理我的用户输入。我没有使用 max 的原因是我要让它从最后一秒返回所有新行。
【解决方案2】:

我会建议你这样做。试一试。然后判断它是否有效。

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

【讨论】:

    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2011-01-25
    相关资源
    最近更新 更多