无法处理来自小型聊天模块的ajax请求

时间:2012-05-16 06:40:40

标签: php jquery chat

我正在为我的客户开发一个简单的聊天模块,但无法处理来自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 />";
}

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

2 个答案:

答案 0 :(得分: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";

function getData(){

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);
    }
});

}

答案 1 :(得分:1)

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

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