php - 来自 mysql 的长轮询信息不起作用

标签 php jquery mysql ajax long-polling

我正在尝试使用 ajax、jquery、php 和 mysql 进行基于长轮询的聊天,但似乎有些不对劲(我也是长轮询的新手)。

索引.php:

 <?php
include 'db.php';
$result = mysql_query("SELECT id FROM chatpoll ORDER BY id DESC LIMIT 1");
while($row = mysql_fetch_array($result))
{
    $old_msg_id = $row['id'];
}
?>
<html>
<head>
    <script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" charset="utf-8">

        var old_msg_id = <?php echo $old_msg_id; ?>;

        function waitForMsg(){
            $.ajax({
                type: "GET",
                url: "poll.php?old_msg_id=" + old_msg_id,
                async: true,
                cache: false,

                success: function(data){
                    var json = eval('(' + data + ')');
                    if(json['msg'] != "") {
                        alert("New msg added to base!");
                    }
                    old_msg_id = json['old_msg_id'];
                    setTimeout('waitForMsg()',1000);
                },
                error: function(XMLHttpRequest, textStatus, errorThrown){
                    alert("error: " + textStatus + " (" + errorThrown + ")");
                    setTimeout('waitForMsg()',15000);
                }
            });
        }
        $(document).ready(function(){
            waitForMsg();
        });
        function load(old_msg_id) //part of code which i'm not using yet
        {
            $.get('getmsg.php?last_msg_id='+ old_msg_id, function(data){
                $('#chat').append(data);
            }, 'html');
        }
    </script>
</head>
<body>
    <div id="chat">
    </div>
</body>
</html>

和 poll.php

 <?php
include 'db.php';
$old_msg_id = $_GET['old_msg_id'];
$result = mysql_query("SELECT id FROM chatpoll ORDER BY id DESC LIMIT 1");
while($row = mysql_fetch_array($result))
{
    $last_msg_id = $row['id'];
}
while($old_msg_id >= $last_msg_id) {
    usleep(1000);
    clearstatcache();
    $old_msg_id = $last_msg_id;
}
$response = array();
$response['msg'] = 'new';
$response['old_msg_id'] = $old_msg_id;
echo json_encode($response);
?>

它在 index.php 和 poll.php 中都没有显示任何错误,但是当我插入 id 大于 old_msg_id 的数据时,没有任何反应..

最佳答案

将 poll.php 文件中的代码更改为以下内容:

<?php
include 'db.php';
$old_msg_id = $_GET['old_msg_id']; 
$result = mysql_query("SELECT id FROM chatpoll ORDER BY id DESC LIMIT 1");
while($row = mysql_fetch_array($result))
{
    $last_msg_id = $row['id']; 
}
while($last_msg_id <= $old_msg_id)
{
    usleep(1000);
    clearstatcache();
    $result = mysql_query("SELECT id FROM chatpoll ORDER BY id DESC LIMIT 1");
    while($row = mysql_fetch_array($result))
    {
        $last_msg_id = $row['id'];
    }
}
$response = array();
$response['msg'] = 'new';
$response['old_msg_id'] = $last_msg_id;
echo json_encode($response);
?>

关于php - 来自 mysql 的长轮询信息不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11453423/

相关文章:

javascript - 如何使用 jQuery 追加一个包含多个元素的元素(div)?

javascript - 将本地js函数导入到node.js中

jquery - 奇怪的 <div> 位置(在 jQuery 函数期间四处移动)

mysql - Grails DetachedCriteria 使用 'where' 抛出 SyntaxErrorException

php - 如何从 PHP 中的数组创建逗号分隔的列表?

php - 为什么 phpmyadmin 显示文件列表而不是数据库?

javascript - PHP 邮件显示没有链接的文本

sql - 以简单的数据库架构 : Good and Bad points? 为例

php - 返回 queryfetch 并输出特定行

php - 如何将动态创建的文本框值插入到php中的数据库