0

我正在尝试通过 ajax 提取 mysql 表的最新条目并将其显示为 div 内的 html 内容。我的 ajax 和 php 运行正常,我唯一的问题是我想查询新条目并在循环内按时间间隔堆叠结果,我遇到了两个问题:让数据表现得像一个正常的javascript 字符串,并让循环仅返回唯一条目。

更新.php 文件

$con=mysqli_connect("mydbhost.com","username","password","database_name");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM conversations");
$j = 0;
while($row = mysqli_fetch_array($result))
{
$carray[j] =   $row['comment'];
$j++;
}
$comment = (array_pop($carray));
echo $comment;
echo "<br>";
mysqli_close($con);

JQuery Ajax 请求循环:

$(document).ready(function(e){
  var comment;
  function commentLoop() {
    comment = $('#testdiv').load('update.php');
    $('#testdiv').append(comment);
    setTimeout(commentLoop, 6000);
  }
  commentLoop();

  $(document).focus();
});
4

3 回答 3

3

问题是SELECT * FROM conversations你是否一直要求整张桌子——尽管你只拿最后一张。

您的代码需要记住已加载的评论,并且只获取比该评论更新的评论。

例如,假设您的主键是增量的,请执行SELECT * FROM conversations WHERE convid > ?. 替换?为已加载的最新评论。如果您是第一次加载,请执行SELECT * FROM conversations

您可以将使用请求参数显示的最后一个评论 id 传递到update.php. 我还建议以 JSON 格式返回数据,以便您可以返回评论和 id 的集合并轻松解析它

于 2013-04-09T23:14:17.103 回答
1

json这将计算表中的评论并选择最后输入的评论,然后仅当接收到的计数低于表中的评论数时才将它们作为数据传递给 ajax :

PHP:

if(isset($_GET['data']))
{   
    $con        = new mysqli('host', 'user', 'password', 'database');
    $init_count = $_GET['data'];
    $stmt1      = "SELECT COUNT(*) AS count FROM conversations";
    $stmt2      = "SELECT comment FROM conversations ORDER BY date_column DESC LIMIT 1";

    $total = $con->prepare($stmt1);
    $total->execute();
    $total->bind_result($count);
    $total->fetch();
    $total->close();    

    if( ($init_count != '') && ($init_count < $count) )
    {
        $lastComment = $con->prepare($stmt2);
        $lastComment->execute();
        $result = $lastComment->get_result();
        $row    = $result->fetch_assoc();
        $lastComment->close();

        $data = array(
                 'comment' => $row['comment'],
                 'count'   => $count
                 );
    }

    elseif($init_count == '')
    {
        $data = array(
        'comment' => '',
        'count'   => $count
        );
    }
    $pdo->close();
    echo json_encode($data);
}

HTML:

<input type="hidden" id="count" value="" />

查询:

$(document).ready(function(e){

    function getComment(){
        var count = $('#test').val();
        $.ajax({
                type: 'get',
                url: 'update.php?data=' + count,
                dataType: 'json',
                success: function(data)
            {
            $('#count').val(data.count);
            if(data.comment) !=  $('#testdiv').html(data.comment);
            }
        });
    }
    getComment();
    setInterval(getComment, 6000);

});
于 2013-04-10T06:01:36.080 回答
-1
SELECT * FROM conversations order by insert_date desc limit 10

insert_date 插入日期时间评论,我希望你有一个字段来存储,如果现在不添加它

于 2013-04-09T23:17:10.270 回答