问题描述
我正在为我的用户提供消息传递服务。我使用AJAX发送消息而不刷新消息。我想自动从数据库中获取新行(如果当前用户或另一位用户输入了任何消息),而无需刷新旧消息。
<div id="readmsg">
#The messages is to be read here....
</div>
<textarea placeholder="Write your message.." id="msg"></textarea>
<input type="submit" value="Send" id="sendmsg">
<?php $user1 = 1; $user2 = 2; ?>
<script type="text/javascript">
$(document).ready(function(){
$("#sendmsg").on("click",function(e){
e.preventDefault();
var usera = <?php echo $user1.";";?>
var userb = <?php echo $user2.";";?>
var msg = $("#msg").val();
$.ajax({
url : "sendmessageprocess.php",type : "POST",data : {message:msg,user1:usera,user2:userb},success : function(data){
document.getElementById("msg").value="";
$("#msg").val("");
}
});
})
});
</script>
解决方法
正如我在评论中看到的,朋友们只会使您的问题变得复杂,而与您的主要问题相去甚远
过去作为聊天室创建者,我会认真地建议您使用其他技术代替ajax
但是,如果有必要使用ajax,解决问题的最佳方法是:
在查询中获取新消息后,将最后一行ID放入会话或cookie中的某个索引中,例如:
$_SESSION['last_msg_id'] = $row['id'];
并在另一个请求中获得消息,其ID大于您的last_msg_id
$query = 'SELECT * FROM `messages` WHERE `id` > "' . $_SESSION['last_msg_id'] . '"';
,例如,对于没有您的会话索引的新客户,例如,获取最近的10条消息,并以告知的方式创建您的会话索引。例如:
if(isset($_SESSION['last_msg_id'])){
$query = 'SELECT * FROM `messages` WHERE `id` > "' . $_SESSION['last_msg_id'] . '"';
}else{
$query = 'SELECT * FROM `messages` ORDER BY `id` ASC LIMIT 10';
}
// your query process
$rows = {your rows};
foreach($rows as $row){
$_SESSION['last_msg_id'] = $row['id'];
}
// or
$rows = {your rows};
$last_row = end($row);
$_SESSION['last_msg_id'] = $last_row['id']