0

我正在为我的客户开发一个简单的聊天模块,但无法处理来自setInterval()

这是我发送请求以从数据库中获取数据的 js 代码

function getData(){

    jQuery.ajax({
        url: '../../get_data.php',
        data: 'to=<?php echo $_SESSION['ch_usr_id']; ?>',
        cache: false,
        success: function(data){
            jQuery('<div>'+data+'</div>').appendTo("#ch-data-con");
            setInterval("getData()", 5000);
        }
    });
}

这是get_data.php根据请求生成数据的文件

require "../../support/connection/connect_gib.php";

$to = addslashes(trim($_REQUEST['to']));

$query = "select * from chat where 
          guest_id='".mysql_real_escape_string($to)."' order by id asc";
$result = mysql_query($query);

while( $row = mysql_fetch_assoc($result) ){
    echo "<b>".$row['frm']." : </b> " .$row['message'] . "<br />";
}

我得到了循环中的结果,就像所有数据一次又一次地重复一样,但是我想要新更新的数据,请让我纠正我做错的事情..

4

2 回答 2

1

您应该保留获取的最后一个 id 并将其用于新请求。在服务器端,您应该从那里获取。

$id= addslashes(trim($_REQUEST['id']));
$query = "select * from chat where 
          guest_id='".mysql_real_escape_string($to)."' AND id > '".mysql_real_escape_string($id)."' order by id asc";

函数获取数据(){

jQuery.ajax({
    url: '../../get_data.php',
    data: 'to=<?php echo $_SESSION['ch_usr_id']; ?>&id=' + last_id_fecthed,
    cache: false,
    success: function(data){
        jQuery('<div>'+data+'</div>').appendTo("#ch-data-con");
        setInterval("getData()", 5000);
    }
});

}

于 2012-05-16T06:46:55.203 回答
1

您在 jQuery 中使用 appendTo 函数。所以所有聊天消息都将附加在旧列表之后。您可以使用 .html() 函数来替换完整的数据。

另一种方法是只从 php 端获取最后一条聊天消息,因此所有数据都不会重复。您可以使用 auto id 来指出最后获取的消息。

于 2012-05-16T06:47:27.500 回答