我正在为我的客户开发一个简单的聊天模块,但无法处理来自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 />";
}
我得到了循环结果,就像所有数据一次又一次重复,但我想要新更新的数据,请让我纠正我做错了..
答案 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指出最后提取的消息。